home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / OCEAuthDir.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  173.4 KB  |  4,509 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        OCEAuthDir.mod
  3.  
  4.      Contains:    Apple Open Collaboration Environment Authentication Interfaces.
  5.  
  6.      Version:    Technology:    AOCE Toolbox 1.02
  7.                  Package:    Universal Interfaces 2.1ß1 in “MPW Prerelease” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE OCEAuthDir;
  23.  
  24. IMPORT SYSTEM, Types, AppleTalk, Files, OCE;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.  
  30. CONST
  31.     kRC4KeySizeInBytes*            = 8;                            (* size of an RC4 key *)
  32.     kRefNumUnknown*                = 0;
  33.  
  34.     kEnumDistinguishedNameBit*    = 0;
  35.     kEnumAliasBit*                = 1;
  36.     kEnumPseudonymBit*            = 2;
  37.     kEnumDNodeBit*                = 3;
  38.     kEnumInvisibleBit*            = 4;
  39.  
  40. (* Values of DirEnumChoices *)
  41.     kEnumDistinguishedNameMask*    = ASH(1,kEnumDistinguishedNameBit);
  42.     kEnumAliasMask*                = ASH(1,kEnumAliasBit);
  43.     kEnumPseudonymMask*            = ASH(1,kEnumPseudonymBit);
  44.     kEnumDNodeMask*                = ASH(1,kEnumDNodeBit);
  45.     kEnumInvisibleMask*            = ASH(1,kEnumInvisibleBit);
  46.     kEnumAllMask*                = kEnumDistinguishedNameMask + kEnumAliasMask + kEnumPseudonymMask + kEnumDNodeMask + kEnumInvisibleMask;
  47.  
  48.     
  49. TYPE
  50.     DirEnumChoices* = LONGINT;
  51.  
  52. (* Values of DirSortOption *)
  53.  
  54. CONST
  55.     kSortByName*                    = 0;
  56.     kSortByType*                    = 1;
  57.  
  58. (* Values of DirSortDirection *)
  59.     kSortForwards*                = 0;
  60.     kSortBackwards*                = 1;
  61.  
  62. (* Values of DirMatchWith *)
  63.     kMatchAll*                    = 0;
  64.     kExactMatch*                    = 1;
  65.     kBeginsWith*                    = 2;
  66.     kEndingWith*                    = 3;
  67.     kContaining*                    = 4;
  68.  
  69.     
  70. TYPE
  71.     DirMatchWith* = Types.SInt8;
  72.  
  73.  
  74. CONST
  75.     kCurrentOCESortVersion*        = 1;
  76.  
  77. (*  Access controls are implemented on three levels*:
  78.  *      DNode, Record, and Attribute Type levels
  79.  *  Some access control bits apply to the container itself, and some apply to its contents.
  80.  *
  81.  *  The Catalog Toolbox supports six functions.  These calls are*:
  82.  *  DSGetDNodeAccessControl : to get Access Controls at the DNode level
  83.  *    DSGetRecordAccessControl  : to get Access Controls at the record level
  84.  *  DSGetAttributeAccessControl : to get Access Privileges at the attribute type level
  85.  * 
  86.  *  The GetXXXAccessControl calls will return access control masks for various categories
  87.  *  of users.  Please refer to the access control document for a description of the
  88.  *  categories of users.  In general these are*:
  89.  *      ThisRecordOwner         - means the identity of the record itself
  90.  *      Friends                  - means any one of the assigned friends for the record
  91.  *      AuthenticatedInDNode     - means any valid user that is an authenticated entity
  92.  *          in the DNode in which this record is located
  93.  *      AuthenticatedInDirectory - means any valid authenticated catalog user
  94.  *      Guest                      - means an unauthenticated user.
  95.  *  Bit masks for various permitted access controls are defined below.
  96.  *
  97.  *  GetXXXAccessControl calls will return access control masks for various categories of
  98.  *  users for this record. In addition they also return the level of access controls
  99.  *  that the user (who is making the GetXXXAccessControl call) has for the DNode,
  100.  *  record, or attribute type.
  101.  *
  102.  *  For records, the access control granted will be minimum of the DNode access
  103.  *  control and record access control masks.  For example, to add an attribute type to a
  104.  *  record, a user must have access control kCreateAttributeTypes at the record and
  105.  *  DNode levels.  Similarly, at the attribute type level, access controls will be the
  106.  *  minimum of the DNode, record, and attribute type access controls.
  107.  *
  108.  *  
  109.  *)
  110. (* access categories bit numbers *)
  111.     kThisRecordOwnerBit*            = 0;
  112.     kFriendsBit*                    = 1;
  113.     kAuthenticatedInDNodeBit*    = 2;
  114.     kAuthenticatedInDirectoryBit* = 3;
  115.     kGuestBit*                    = 4;
  116.     kMeBit*                        = 5;
  117.  
  118. (* Values of CategoryMask *)
  119.     kThisRecordOwnerMask*        = ASH(1,kThisRecordOwnerBit);
  120.     kFriendsMask*                = ASH(1,kFriendsBit);
  121.     kAuthenticatedInDNodeMask*    = ASH(1,kAuthenticatedInDNodeBit);
  122.     kAuthenticatedInDirectoryMask* = ASH(1,kAuthenticatedInDirectoryBit);
  123.     kGuestMask*                    = ASH(1,kGuestBit);
  124.     kMeMask*                        = ASH(1,kMeBit);
  125.  
  126.     kSeeBit*                        = 0;
  127.     kAddBit*                        = 1;
  128.     kDeleteBit*                    = 2;
  129.     kChangeBit*                    = 3;
  130.     kRenameBit*                    = 4;
  131.     kChangePrivsBit*                = 5;
  132.     kSeeFoldersBit*                = 6;
  133.  
  134. (* Values of AccessMask *)
  135.     kSeeMask*                    = ASH(1,kSeeBit);
  136.     kAddMask*                    = ASH(1,kAddBit);
  137.     kDeleteMask*                    = ASH(1,kDeleteBit);
  138.     kChangeMask*                    = ASH(1,kChangeBit);
  139.     kRenameMask*                    = ASH(1,kRenameBit);
  140.     kChangePrivsMask*            = ASH(1,kChangePrivsBit);
  141.     kSeeFoldersMask*                = ASH(1,kSeeFoldersBit);
  142.  
  143.     kAllPrivs*                    = kSeeMask + kAddMask + kDeleteMask + kChangeMask + kRenameMask + kChangePrivsMask + kSeeFoldersMask;
  144.     kNoPrivs*                    = 0;
  145.  
  146.     kSupportsDNodeNumberBit*        = 0;
  147.     kSupportsRecordCreationIDBit* = 1;
  148.     kSupportsAttributeCreationIDBit* = 2;
  149.     kSupportsMatchAllBit*        = 3;
  150.     kSupportsBeginsWithBit*        = 4;
  151.     kSupportsExactMatchBit*        = 5;
  152.     kSupportsEndsWithBit*        = 6;
  153.     kSupportsContainsBit*        = 7;
  154.     kSupportsOrderedEnumerationBit* = 8;
  155.     kCanSupportNameOrderBit*        = 9;
  156.     kCanSupportTypeOrderBit*        = 10;
  157.     kSupportSortBackwardsBit*    = 11;
  158.     kSupportIndexRatioBit*        = 12;
  159.     kSupportsEnumerationContinueBit* = 13;
  160.     kSupportsLookupContinueBit*    = 14;
  161.     kSupportsEnumerateAttributeTypeContinueBit* = 15;
  162.     kSupportsEnumeratePseudonymContinueBit* = 16;
  163.     kSupportsAliasesBit*            = 17;
  164.     kSupportsPseudonymsBit*        = 18;
  165.     kSupportsPartialPathNamesBit* = 19;
  166.     kSupportsAuthenticationBit*    = 20;
  167.     kSupportsProxiesBit*            = 21;
  168.     kSupportsFindRecordBit*        = 22;
  169.  
  170. (* values of DirGestalt *)
  171.     kSupportsDNodeNumberMask*    = ASH(1,kSupportsDNodeNumberBit);
  172.     kSupportsRecordCreationIDMask* = ASH(1,kSupportsRecordCreationIDBit);
  173.     kSupportsAttributeCreationIDMask* = ASH(1,kSupportsAttributeCreationIDBit);
  174.     kSupportsMatchAllMask*        = ASH(1,kSupportsMatchAllBit);
  175.     kSupportsBeginsWithMask*        = ASH(1,kSupportsBeginsWithBit);
  176.     kSupportsExactMatchMask*        = ASH(1,kSupportsExactMatchBit);
  177.     kSupportsEndsWithMask*        = ASH(1,kSupportsEndsWithBit);
  178.     kSupportsContainsMask*        = ASH(1,kSupportsContainsBit);
  179.     kSupportsOrderedEnumerationMask* = ASH(1,kSupportsOrderedEnumerationBit);
  180.     kCanSupportNameOrderMask*    = ASH(1,kCanSupportNameOrderBit);
  181.     kCanSupportTypeOrderMask*    = ASH(1,kCanSupportTypeOrderBit);
  182.     kSupportSortBackwardsMask*    = ASH(1,kSupportSortBackwardsBit);
  183.     kSupportIndexRatioMask*        = ASH(1,kSupportIndexRatioBit);
  184.     kSupportsEnumerationContinueMask* = ASH(1,kSupportsEnumerationContinueBit);
  185.     kSupportsLookupContinueMask*    = ASH(1,kSupportsLookupContinueBit);
  186.     kSupportsEnumerateAttributeTypeContinueMask* = ASH(1,kSupportsEnumerateAttributeTypeContinueBit);
  187.     kSupportsEnumeratePseudonymContinueMask* = ASH(1,kSupportsEnumeratePseudonymContinueBit);
  188.     kSupportsAliasesMask*        = ASH(1,kSupportsAliasesBit);
  189.     kSupportsPseudonymsMask*        = ASH(1,kSupportsPseudonymsBit);
  190.     kSupportsPartialPathNamesMask* = ASH(1,kSupportsPartialPathNamesBit);
  191.     kSupportsAuthenticationMask*    = ASH(1,kSupportsAuthenticationBit);
  192.     kSupportsProxiesMask*        = ASH(1,kSupportsProxiesBit);
  193.     kSupportsFindRecordMask*        = ASH(1,kSupportsFindRecordBit);
  194.  
  195.     kAuthLockLocalIdentityOp*    = 1;
  196.     kAuthUnlockLocalIdentityOp*    = 2;
  197.     kAuthLocalIdentityNameChangeOp* = 3;
  198.  
  199. (* Values of AuthLocalIdentityLockAction *)
  200.     kAuthLockPending*            = 1;
  201.     kAuthLockWillBeDone*            = 2;
  202.  
  203. (* Values of AuthNotifications *)
  204.     kNotifyLockBit*                = 0;
  205.     kNotifyUnlockBit*            = 1;
  206.     kNotifyNameChangeBit*        = 2;
  207.  
  208.     kNotifyLockMask*                = ASH(1,kNotifyLockBit);
  209.     kNotifyUnlockMask*            = ASH(1,kNotifyUnlockBit);
  210.     kNotifyNameChangeMask*        = ASH(1,kNotifyNameChangeBit);
  211.  
  212.     kPersonalDirectoryFileCreator* = LONG("kl03");
  213.     kPersonalDirectoryFileType*    = LONG("pabt");
  214.     kBusinessCardFileType*        = LONG("bust");
  215.     kDirectoryFileType*            = LONG("dirt");
  216.     kDNodeFileType*                = LONG("dnod");
  217.     kDirsRootFileType*            = LONG("drtt");
  218.     kRecordFileType*                = LONG("rcrd");
  219.  
  220.     
  221. TYPE
  222.     DirSortOption* = INTEGER;
  223.  
  224.     DirSortDirection* = INTEGER;
  225.  
  226.     CategoryMask* = LONGINT;
  227.  
  228.     AccessMask* = LONGINT;
  229.  
  230.     DirGestalt* = LONGINT;
  231.  
  232.     AuthLocalIdentityOp* = LONGINT;
  233.  
  234.     AuthLocalIdentityLockAction* = LONGINT;
  235.  
  236.     AuthNotifications* = LONGINT;
  237.  
  238.     DNodeID* = RECORD
  239.         dNodeNumber*:            OCE.DNodeNum;                                (* dNodenumber  *)
  240.         reserved1*:                LONGINT;
  241.         name*:                    OCE.RStringPtr;
  242.         reserved2*:                LONGINT;
  243.     END;
  244.  
  245.     DirEnumSpec* = RECORD
  246.         enumFlag*:                DirEnumChoices;
  247.         indexRatio*:                INTEGER;                                (* Approx Record Position between 1 and 100 If supported, 0 If not supported *)
  248.         (*ΔΔ CASE INTEGER OF
  249.         0: ( *)
  250.     END;
  251.     DirEnumSpecRecord* = RECORD(DirEnumSpec)
  252.             recordIdentifier*:            OCE.LocalRecordID;
  253.            (*ΔΔ );
  254.         1: ( *)
  255.     END;
  256.     DirEnumSpecDNode* = RECORD(DirEnumSpec)
  257.             dNodeIdentifier*:            DNodeID;
  258.            (*ΔΔ );*)
  259.     END;
  260.  
  261.     DirMetaInfo* = RECORD
  262.         info*:                    ARRAY 4 (*ΔΔ[0..3]ΔΔ*) OF LONGINT;
  263.     END;
  264.  
  265.     SLRV* = RECORD
  266.         script*:                    Types.ScriptCode;                                (*   Script code in which entries are sorted *)
  267.         language*:                INTEGER;                                (*   Language code in which entries are sorted *)
  268.         regionCode*:                INTEGER;                                (*   Quickdraw.Region code in which entries are sorted *)
  269.         version*:                INTEGER;                                (*  version of oce sorting software *)
  270.     END;
  271.  
  272. (* Catalog types and operations *)
  273. (* unique identifier for an identity *)
  274.     AuthIdentity* = LONGINT;
  275.  
  276. (* Umbrella LocalIdentity *)
  277.     LocalIdentity* = AuthIdentity;
  278.  
  279. (* A DES key is 8 bytes of data *)
  280.     DESKey* = RECORD
  281.         a*:                        LONGINT;
  282.         b*:                        LONGINT;
  283.     END;
  284.  
  285.     RC4Key* = ARRAY (*ΔΔ[0..*)kRC4KeySizeInBytes(*ΔΔ -1]ΔΔ*) OF Types.SignedByte;
  286.  
  287.     AuthKeyType* = LONGINT;
  288.  
  289. (* key type followed by its data *)
  290.     AuthKey* = RECORD
  291.         keyType*:                AuthKeyType;
  292.         (*ΔΔ CASE INTEGER OF
  293.         0: ( *)
  294.     END;
  295.     AuthKeyDES* = RECORD(AuthKey)
  296.             des*:                        DESKey;
  297.            (*ΔΔ );
  298.         1: ( *)
  299.     END;
  300.     AuthKeyRC4* = RECORD(AuthKey)
  301.             rc4*:                        RC4Key;
  302.            (*ΔΔ );*)
  303.     END;
  304.  
  305.     AuthKeyPtr* = POINTER TO AuthKey;
  306.  
  307.     AuthParamBlockPtr* = POINTER TO AuthParamBlock;
  308.  
  309.     AuthIOCompletionProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (paramBlock: AuthParamBlockPtr);
  310.     AuthIOCompletionUPP* = Types.UniversalProcPtr;
  311.  
  312.     AuthResolveCreationIDPB* = RECORD
  313.         qLink*:                    Types.Ptr;
  314.         reserved1*:                LONGINT;
  315.         reserved2*:                LONGINT;
  316.         ioCompletion*:            AuthIOCompletionUPP;
  317.         ioResult*:                Types.OSErr;
  318.         saveA5*:                    LONGINT;
  319.         reqCode*:                INTEGER;
  320.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  321.         serverHint*:                AppleTalk.AddrBlock;
  322.         dsRefNum*:                INTEGER;
  323.         callID*:                    LONGINT;
  324.         identity*:                AuthIdentity;
  325.         gReserved1*:                LONGINT;
  326.         gReserved2*:                LONGINT;
  327.         gReserved3*:                LONGINT;
  328.         clientData*:                LONGINT;
  329.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  330.         bufferLength*:            LONGINT;                                (*  --> Buffer Memory.Size to hold duplicate Info *)
  331.         buffer*:                    Types.Ptr;                                    (*  --> Buffer  to hold duplicate Info *)
  332.         totalMatches*:            LONGINT;                                (* <--  Total Number of matching names found *)
  333.         actualMatches*:            LONGINT;                                (* <--  Number of matches returned in the buffer *)
  334.     END;
  335.  
  336. (*
  337. kAuthBindSpecificIdentity:
  338. userRecord will contain the user information whose identity has to be
  339. verified. userKey will contain the userKey. An Identity is returned which
  340. binds the key and the userRecord. The identity returned can be used in the 'identity'
  341. field in the header portion (AuthParamHeader) for authenticating the Catalog and
  342. Authentication manager calls.
  343. *)
  344.     AuthBindSpecificIdentityPB* = RECORD
  345.         qLink*:                    Types.Ptr;
  346.         reserved1*:                LONGINT;
  347.         reserved2*:                LONGINT;
  348.         ioCompletion*:            AuthIOCompletionUPP;
  349.         ioResult*:                Types.OSErr;
  350.         saveA5*:                    LONGINT;
  351.         reqCode*:                INTEGER;
  352.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  353.         serverHint*:                AppleTalk.AddrBlock;
  354.         dsRefNum*:                INTEGER;
  355.         callID*:                    LONGINT;
  356.         identity*:                AuthIdentity;
  357.         gReserved1*:                LONGINT;
  358.         gReserved2*:                LONGINT;
  359.         gReserved3*:                LONGINT;
  360.         clientData*:                LONGINT;
  361.         userIdentity*:            AuthIdentity;                            (* <--  binding identity *)
  362.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  363.         userKey*:                AuthKeyPtr;                                (*  --> OCE Key for the user *)
  364.     END;
  365.  
  366. (*
  367. kAuthUnbindSpecificIdentity:
  368. This call will unbind the userRecord and key which were bind earlier.
  369. *)
  370.     AuthUnbindSpecificIdentityPB* = RECORD
  371.         qLink*:                    Types.Ptr;
  372.         reserved1*:                LONGINT;
  373.         reserved2*:                LONGINT;
  374.         ioCompletion*:            AuthIOCompletionUPP;
  375.         ioResult*:                Types.OSErr;
  376.         saveA5*:                    LONGINT;
  377.         reqCode*:                INTEGER;
  378.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  379.         serverHint*:                AppleTalk.AddrBlock;
  380.         dsRefNum*:                INTEGER;
  381.         callID*:                    LONGINT;
  382.         identity*:                AuthIdentity;
  383.         gReserved1*:                LONGINT;
  384.         gReserved2*:                LONGINT;
  385.         gReserved3*:                LONGINT;
  386.         clientData*:                LONGINT;
  387.         userIdentity*:            AuthIdentity;                            (*  --> identity to be deleted *)
  388.     END;
  389.  
  390. (*
  391. kAuthGetSpecificIdentityInfo:
  392. This call will return the userRecord for the given identity. Note*: key is not
  393. returned because this would compromise security.
  394. *)
  395.     AuthGetSpecificIdentityInfoPB* = RECORD
  396.         qLink*:                    Types.Ptr;
  397.         reserved1*:                LONGINT;
  398.         reserved2*:                LONGINT;
  399.         ioCompletion*:            AuthIOCompletionUPP;
  400.         ioResult*:                Types.OSErr;
  401.         saveA5*:                    LONGINT;
  402.         reqCode*:                INTEGER;
  403.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  404.         serverHint*:                AppleTalk.AddrBlock;
  405.         dsRefNum*:                INTEGER;
  406.         callID*:                    LONGINT;
  407.         identity*:                AuthIdentity;
  408.         gReserved1*:                LONGINT;
  409.         gReserved2*:                LONGINT;
  410.         gReserved3*:                LONGINT;
  411.         clientData*:                LONGINT;
  412.         userIdentity*:            AuthIdentity;                            (*  --> identity of initiator *)
  413.         userRecord*:                OCE.RecordIDPtr;                            (* <--  OCE name(Record) of the user *)
  414.     END;
  415.  
  416. (*
  417. kAuthAddKey:
  418. userRecord will contain the user information whose identity has to be
  419. created. userKey will point to the key to be created. password points to
  420. an RString containing the password used to generate the key.
  421. *)
  422.     AuthAddKeyPB* = RECORD
  423.         qLink*:                    Types.Ptr;
  424.         reserved1*:                LONGINT;
  425.         reserved2*:                LONGINT;
  426.         ioCompletion*:            AuthIOCompletionUPP;
  427.         ioResult*:                Types.OSErr;
  428.         saveA5*:                    LONGINT;
  429.         reqCode*:                INTEGER;
  430.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  431.         serverHint*:                AppleTalk.AddrBlock;
  432.         dsRefNum*:                INTEGER;
  433.         callID*:                    LONGINT;
  434.         identity*:                AuthIdentity;
  435.         gReserved1*:                LONGINT;
  436.         gReserved2*:                LONGINT;
  437.         gReserved3*:                LONGINT;
  438.         clientData*:                LONGINT;
  439.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  440.         userKey*:                AuthKeyPtr;                                (* <--  OCE Key for the user *)
  441.         password*:                OCE.RStringPtr;                                (*  --> Pointer to password string *)
  442.     END;
  443.  
  444. (*
  445. kAuthChangeKey:
  446. userRecord will contain the user information whose identity has to be
  447. created. userKey will point to the key to be created. password points to
  448. an RString containing the password used to generate the key.
  449. *)
  450.     AuthChangeKeyPB* = RECORD
  451.         qLink*:                    Types.Ptr;
  452.         reserved1*:                LONGINT;
  453.         reserved2*:                LONGINT;
  454.         ioCompletion*:            AuthIOCompletionUPP;
  455.         ioResult*:                Types.OSErr;
  456.         saveA5*:                    LONGINT;
  457.         reqCode*:                INTEGER;
  458.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  459.         serverHint*:                AppleTalk.AddrBlock;
  460.         dsRefNum*:                INTEGER;
  461.         callID*:                    LONGINT;
  462.         identity*:                AuthIdentity;
  463.         gReserved1*:                LONGINT;
  464.         gReserved2*:                LONGINT;
  465.         gReserved3*:                LONGINT;
  466.         clientData*:                LONGINT;
  467.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  468.         userKey*:                AuthKeyPtr;                                (* <--  New OCE Key for the user *)
  469.         password*:                OCE.RStringPtr;                                (*  -->Pointer to the new password string *)
  470.     END;
  471.  
  472. (*
  473. AuthDeleteKey:
  474. userRecord will contain the user information whose Key has to be deleted.
  475. *)
  476.     AuthDeleteKeyPB* = RECORD
  477.         qLink*:                    Types.Ptr;
  478.         reserved1*:                LONGINT;
  479.         reserved2*:                LONGINT;
  480.         ioCompletion*:            AuthIOCompletionUPP;
  481.         ioResult*:                Types.OSErr;
  482.         saveA5*:                    LONGINT;
  483.         reqCode*:                INTEGER;
  484.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  485.         serverHint*:                AppleTalk.AddrBlock;
  486.         dsRefNum*:                INTEGER;
  487.         callID*:                    LONGINT;
  488.         identity*:                AuthIdentity;
  489.         gReserved1*:                LONGINT;
  490.         gReserved2*:                LONGINT;
  491.         gReserved3*:                LONGINT;
  492.         clientData*:                LONGINT;
  493.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  494.     END;
  495.  
  496. (* AuthPasswordToKey*: Converts an RString into a key. *)
  497.     AuthPasswordToKeyPB* = RECORD
  498.         qLink*:                    Types.Ptr;
  499.         reserved1*:                LONGINT;
  500.         reserved2*:                LONGINT;
  501.         ioCompletion*:            AuthIOCompletionUPP;
  502.         ioResult*:                Types.OSErr;
  503.         saveA5*:                    LONGINT;
  504.         reqCode*:                INTEGER;
  505.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  506.         serverHint*:                AppleTalk.AddrBlock;
  507.         dsRefNum*:                INTEGER;
  508.         callID*:                    LONGINT;
  509.         identity*:                AuthIdentity;
  510.         gReserved1*:                LONGINT;
  511.         gReserved2*:                LONGINT;
  512.         gReserved3*:                LONGINT;
  513.         clientData*:                LONGINT;
  514.         userRecord*:                OCE.RecordIDPtr;                            (*  --> OCE name(Record) of the user *)
  515.         key*:                    AuthKeyPtr;                                (* <--  *)
  516.         password*:                OCE.RStringPtr;                                (*  -->Pointer to the new password string *)
  517.     END;
  518.  
  519. (*
  520. kAuthGetCredentials:
  521. userRecord will contain the user information whose identity has to be
  522. kMailDeletedMask. keyType (e.g. asDESKey) will indicate what type of key has to
  523. be deleted.
  524. *)
  525.     AuthGetCredentialsPB* = RECORD
  526.         qLink*:                    Types.Ptr;
  527.         reserved1*:                LONGINT;
  528.         reserved2*:                LONGINT;
  529.         ioCompletion*:            AuthIOCompletionUPP;
  530.         ioResult*:                Types.OSErr;
  531.         saveA5*:                    LONGINT;
  532.         reqCode*:                INTEGER;
  533.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  534.         serverHint*:                AppleTalk.AddrBlock;
  535.         dsRefNum*:                INTEGER;
  536.         callID*:                    LONGINT;
  537.         identity*:                AuthIdentity;
  538.         gReserved1*:                LONGINT;
  539.         gReserved2*:                LONGINT;
  540.         gReserved3*:                LONGINT;
  541.         clientData*:                LONGINT;
  542.         userIdentity*:            AuthIdentity;                            (*  --> identity of initiator *)
  543.         recipient*:                OCE.RecordIDPtr;                            (*  --> OCE name of recipient *)
  544.         sessionKey*:                AuthKeyPtr;                                (* <--  session key *)
  545.         expiry*:                    OCE.UTCTime;                                (* <--> desired/actual expiry *)
  546.         credentialsLength*:        LONGINT;                                (* <--> max/actual credentials size *)
  547.         credentials*:            Types.Ptr;                                    (* <--  buffer where credentials are returned *)
  548.     END;
  549.  
  550. (*
  551. AuthDecryptCredentialsPB:
  552. Changes:
  553. userKey is changed userIdentity.
  554. userRecord is changed to initiatorRecord. User must supply buffer
  555. to hold initiatorRecord.
  556. agentList has changed to agent. There wil be no call back.
  557. User must supply buffer to hold agent Record.
  558. An additional boolean parameter 'hasAgent' is included.
  559. Toolbox will set this if an 'Agent' record is found in the
  560. credentials. If RecordIDPtr is 'nil', no agent record will
  561. be copied. However user can examine 'hasAgent', If true user
  562. can reissue this call with apprpriate buffer for getting a recordID.
  563. agent has changed to intermediary.  User must supply buffer to hold 
  564. intermediary Record.  The toolbox will set 'hasIntermediary' if an
  565. 'intermediary' record is found in the credentials. 
  566. *)
  567.     AuthDecryptCredentialsPB* = RECORD
  568.         qLink*:                    Types.Ptr;
  569.         reserved1*:                LONGINT;
  570.         reserved2*:                LONGINT;
  571.         ioCompletion*:            AuthIOCompletionUPP;
  572.         ioResult*:                Types.OSErr;
  573.         saveA5*:                    LONGINT;
  574.         reqCode*:                INTEGER;
  575.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  576.         serverHint*:                AppleTalk.AddrBlock;
  577.         dsRefNum*:                INTEGER;
  578.         callID*:                    LONGINT;
  579.         identity*:                AuthIdentity;
  580.         gReserved1*:                LONGINT;
  581.         gReserved2*:                LONGINT;
  582.         gReserved3*:                LONGINT;
  583.         clientData*:                LONGINT;
  584.         userIdentity*:            AuthIdentity;                            (*  --> user's Identity *)
  585.         initiatorRecord*:        OCE.RecordIDPtr;                            (* <--  OCE name of the initiator *)
  586.         sessionKey*:                AuthKeyPtr;                                (* <--  session key *)
  587.         expiry*:                    OCE.UTCTime;                                (* <--  credentials expiry time *)
  588.         credentialsLength*:        LONGINT;                                (*  --> actual credentials size *)
  589.         credentials*:            Types.Ptr;                                    (*  --> credentials to be decrypted *)
  590.         issueTime*:                OCE.UTCTime;                                (* <--  credentials expiry time *)
  591.         hasIntermediary*:        BOOLEAN;                                (* <--  if true, An intermediary Record was found in credentials *)
  592.         filler1*:                BOOLEAN;
  593.         intermediary*:            OCE.RecordIDPtr;                            (* <--  recordID of the intermediary *)
  594.     END;
  595.  
  596.     AuthMakeChallengePB* = RECORD
  597.         qLink*:                    Types.Ptr;
  598.         reserved1*:                LONGINT;
  599.         reserved2*:                LONGINT;
  600.         ioCompletion*:            AuthIOCompletionUPP;
  601.         ioResult*:                Types.OSErr;
  602.         saveA5*:                    LONGINT;
  603.         reqCode*:                INTEGER;
  604.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  605.         serverHint*:                AppleTalk.AddrBlock;
  606.         dsRefNum*:                INTEGER;
  607.         callID*:                    LONGINT;
  608.         identity*:                AuthIdentity;
  609.         gReserved1*:                LONGINT;
  610.         gReserved2*:                LONGINT;
  611.         gReserved3*:                LONGINT;
  612.         clientData*:                LONGINT;
  613.         key*:                    AuthKeyPtr;                                (*  --> UnEncrypted SessionKey *)
  614.         challenge*:                Types.Ptr;                                    (* <--  Encrypted Challenge *)
  615.         challengeBufferLength*:    LONGINT;                                (*  ->length of challenge buffer *)
  616.         challengeLength*:        LONGINT;                                (*  <-length of Encrypted Challenge *)
  617.     END;
  618.  
  619.     AuthMakeReplyPB* = RECORD
  620.         qLink*:                    Types.Ptr;
  621.         reserved1*:                LONGINT;
  622.         reserved2*:                LONGINT;
  623.         ioCompletion*:            AuthIOCompletionUPP;
  624.         ioResult*:                Types.OSErr;
  625.         saveA5*:                    LONGINT;
  626.         reqCode*:                INTEGER;
  627.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  628.         serverHint*:                AppleTalk.AddrBlock;
  629.         dsRefNum*:                INTEGER;
  630.         callID*:                    LONGINT;
  631.         identity*:                AuthIdentity;
  632.         gReserved1*:                LONGINT;
  633.         gReserved2*:                LONGINT;
  634.         gReserved3*:                LONGINT;
  635.         clientData*:                LONGINT;
  636.         key*:                    AuthKeyPtr;                                (*  --> UnEncrypted SessionKey *)
  637.         challenge*:                Types.Ptr;                                    (*  --> Encrypted Challenge *)
  638.         reply*:                    Types.Ptr;                                    (* <--  Encrypted Reply *)
  639.         replyBufferLength*:        LONGINT;                                (*  -->length of challenge buffer *)
  640.         challengeLength*:        LONGINT;                                (*  --> length of Encrypted Challenge *)
  641.         replyLength*:            LONGINT;                                (* <--  length of Encrypted Reply *)
  642.     END;
  643.  
  644.     AuthVerifyReplyPB* = RECORD
  645.         qLink*:                    Types.Ptr;
  646.         reserved1*:                LONGINT;
  647.         reserved2*:                LONGINT;
  648.         ioCompletion*:            AuthIOCompletionUPP;
  649.         ioResult*:                Types.OSErr;
  650.         saveA5*:                    LONGINT;
  651.         reqCode*:                INTEGER;
  652.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  653.         serverHint*:                AppleTalk.AddrBlock;
  654.         dsRefNum*:                INTEGER;
  655.         callID*:                    LONGINT;
  656.         identity*:                AuthIdentity;
  657.         gReserved1*:                LONGINT;
  658.         gReserved2*:                LONGINT;
  659.         gReserved3*:                LONGINT;
  660.         clientData*:                LONGINT;
  661.         key*:                    AuthKeyPtr;                                (*  --> UnEncrypted SessionKey *)
  662.         challenge*:                Types.Ptr;                                    (*  --> Encrypted Challenge *)
  663.         reply*:                    Types.Ptr;                                    (*  --> Encrypted Reply *)
  664.         challengeLength*:        LONGINT;                                (*  --> length of Encrypted Challenge *)
  665.         replyLength*:            LONGINT;                                (*  --> length of Encrypted Reply *)
  666.     END;
  667.  
  668. (*
  669. kAuthGetUTCTime:
  670. RLI will contain a valid RLI for a cluster server.
  671. UTC(GMT) time from one of the cluster server will be returned.
  672. An 'offSet' from UTC(GMT) to Mac Local Sound.Time will also be returned.
  673. If RLI is nil Map DA is used to determine UTC(GMT).
  674. Mac Local Sound.Time* = theUTCTime + theUTCOffset.
  675. *)
  676.     AuthGetUTCTimePB* = RECORD
  677.         qLink*:                    Types.Ptr;
  678.         reserved1*:                LONGINT;
  679.         reserved2*:                LONGINT;
  680.         ioCompletion*:            AuthIOCompletionUPP;
  681.         ioResult*:                Types.OSErr;
  682.         saveA5*:                    LONGINT;
  683.         reqCode*:                INTEGER;
  684.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  685.         serverHint*:                AppleTalk.AddrBlock;
  686.         dsRefNum*:                INTEGER;
  687.         callID*:                    LONGINT;
  688.         identity*:                AuthIdentity;
  689.         gReserved1*:                LONGINT;
  690.         gReserved2*:                LONGINT;
  691.         gReserved3*:                LONGINT;
  692.         clientData*:                LONGINT;
  693.         pRLI*:                    OCE.PackedRLIPtr;                            (*  --> packed RLI of the Node, whose server's UTC is requested *)
  694.         theUTCTime*:                OCE.UTCTime;                                (* <--  current UTC(GMT) Sound.Time utc seconds since 1/1/1904 *)
  695.         theUTCOffset*:            OCE.UTCOffset;                                (* <--  offset from UTC(GMT) seconds EAST of Greenwich *)
  696.     END;
  697.  
  698. (*
  699. kAuthMakeProxy:
  700. A user represented bu the 'userIdentity' can make a proxy using this call.
  701. 'recipient' is the RecordID of the recipient whom user is requesting proxy.
  702. 'intermediary' is the RecordID of the intermediary holding proxy for the user.
  703. 'firstValid' is time at which proxy becomes valid.
  704. 'expiry' is the time at which proxy must expire.
  705. 'proxyLength' will have the length of the buffer pointed by 'proxy' as input.
  706. When the call completes, it will hold the actual length of proxy. If the
  707. call completes 'kOCEMoreData' error, client can reissue the call with the
  708. buffer size as 'proxyLength' returned.
  709. expiry is a suggestion, and may be adjusted to be earlier by the ADAP/OCE server.
  710. The 'proxy' obtained like this might be used by the 'intermediary' to obtain credentials
  711. for the server using TradeProxyForCredentials call.
  712. authDataLength and authData are intended for possible future work, but are
  713. ignored for now.
  714. *)
  715.     AuthMakeProxyPB* = RECORD
  716.         qLink*:                    Types.Ptr;
  717.         reserved1*:                LONGINT;
  718.         reserved2*:                LONGINT;
  719.         ioCompletion*:            AuthIOCompletionUPP;
  720.         ioResult*:                Types.OSErr;
  721.         saveA5*:                    LONGINT;
  722.         reqCode*:                INTEGER;
  723.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  724.         serverHint*:                AppleTalk.AddrBlock;
  725.         dsRefNum*:                INTEGER;
  726.         callID*:                    LONGINT;
  727.         identity*:                AuthIdentity;
  728.         gReserved1*:                LONGINT;
  729.         gReserved2*:                LONGINT;
  730.         gReserved3*:                LONGINT;
  731.         clientData*:                LONGINT;
  732.         userIdentity*:            AuthIdentity;                            (*  --> identity of principal *)
  733.         recipient*:                OCE.RecordIDPtr;                            (*  --> OCE name of recipient *)
  734.         firstValid*:                OCE.UTCTime;                                (*  --> time at which proxy becomes valid *)
  735.         expiry*:                    OCE.UTCTime;                                (*  --> time at which proxy expires *)
  736.         authDataLength*:            LONGINT;                                (*  --> size of authorization data *)
  737.         authData*:                Types.Ptr;                                    (*  --> pointer to authorization data *)
  738.         proxyLength*:            LONGINT;                                (* <--> max/actual proxy size *)
  739.         proxy*:                    Types.Ptr;                                    (* <--> buffer where proxy is returned *)
  740.         intermediary*:            OCE.RecordIDPtr;                            (*  --> RecordID of intermediary *)
  741.     END;
  742.  
  743. (*
  744. kAuthTradeProxyForCredentials:
  745. Using this call, intermediary holding a 'proxy' for a recipient may obtain credentials
  746. for that recipient. 'userIdentity' is the identity for the 'intermediary'.
  747. 'recipient' is the RecordID for whom credetials are requested.
  748. 'principal' is the RecordID of the user who created the proxy.
  749. 'proxyLength' is the length of data pointed by 'proxy.
  750. If the call is succesfull, credentials will be returned in the
  751. buffer pointed by 'credentials'. 'expiry' is the desired expiry time at input.
  752. When call succeds this will have expiry time of credentials.
  753. This is very similar to GetCredentials except that we (of course) need the proxy,
  754. but we also need the name of the principal who created the proxy.
  755. *)
  756.     AuthTradeProxyForCredentialsPB* = RECORD
  757.         qLink*:                    Types.Ptr;
  758.         reserved1*:                LONGINT;
  759.         reserved2*:                LONGINT;
  760.         ioCompletion*:            AuthIOCompletionUPP;
  761.         ioResult*:                Types.OSErr;
  762.         saveA5*:                    LONGINT;
  763.         reqCode*:                INTEGER;
  764.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  765.         serverHint*:                AppleTalk.AddrBlock;
  766.         dsRefNum*:                INTEGER;
  767.         callID*:                    LONGINT;
  768.         identity*:                AuthIdentity;
  769.         gReserved1*:                LONGINT;
  770.         gReserved2*:                LONGINT;
  771.         gReserved3*:                LONGINT;
  772.         clientData*:                LONGINT;
  773.         userIdentity*:            AuthIdentity;                            (*  --> identity of intermediary *)
  774.         recipient*:                OCE.RecordIDPtr;                            (*  --> OCE name of recipient *)
  775.         sessionKey*:                AuthKeyPtr;                                (* <--  session key *)
  776.         expiry*:                    OCE.UTCTime;                                (* <--> desired/actual expiry *)
  777.         credentialsLength*:        LONGINT;                                (* <--> max/actual credentials size *)
  778.         credentials*:            Types.Ptr;                                    (* <--> buffer where credentials are returned *)
  779.         proxyLength*:            LONGINT;                                (*  --> actual proxy size *)
  780.         proxy*:                    Types.Ptr;                                    (*  --> buffer containing proxy *)
  781.         principal*:                OCE.RecordIDPtr;                            (*  --> RecordID of principal *)
  782.     END;
  783.  
  784. (* API for Local Identity Interface *)
  785. (*
  786. AuthGetLocalIdentityPB:
  787. A Collaborative application intended to work under the umbrella of LocalIdentity
  788. for the OCE toolbox will have to make this call to obtain LocalIdentity.
  789. If LocalIdentity has not been setup, then application will get
  790. 'kOCEOCESetupRequired.'. In this case application should put the dialog
  791. recommended by the OCE Setup document and guide the user through OCE Setup.
  792. If the OCESetup contains local identity, but user has not unlocked, it will get
  793. kOCELocalAuthenticationFail. In this case application should use SDPPromptForLocalIdentity
  794. to prompt user for the password.
  795. If a backGround application or stand alone code requires LocalIdentity, if it gets the
  796. Types.OSErr from LocalIdentity and can not call SDPPromptForLocalIdentity, it should it self
  797. register with the toolbox using kAuthAddToLocalIdentityQueue call. It will be notified
  798. when a LocalIdentity gets created by a foreground application.
  799. *)
  800.     AuthGetLocalIdentityPB* = RECORD
  801.         qLink*:                    Types.Ptr;
  802.         reserved1*:                LONGINT;
  803.         reserved2*:                LONGINT;
  804.         ioCompletion*:            AuthIOCompletionUPP;
  805.         ioResult*:                Types.OSErr;
  806.         saveA5*:                    LONGINT;
  807.         reqCode*:                INTEGER;
  808.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  809.         serverHint*:                AppleTalk.AddrBlock;
  810.         dsRefNum*:                INTEGER;
  811.         callID*:                    LONGINT;
  812.         identity*:                AuthIdentity;
  813.         gReserved1*:                LONGINT;
  814.         gReserved2*:                LONGINT;
  815.         gReserved3*:                LONGINT;
  816.         clientData*:                LONGINT;
  817.         theLocalIdentity*:        LocalIdentity;                            (* <--  LocalIdentity *)
  818.     END;
  819.  
  820. (*
  821. kAuthUnlockLocalIdentity:
  822. The LocalIdentity can be created using this call.
  823. The userName and password correspond to the LocalIdentity setup.
  824. If the password matches, then collabIdentity will be returned.
  825. Typically SDPPromptForLocalIdentity call will make this call.
  826. All applications which are registered through kAuthAddToLocalIdentityQueue
  827. will be notified.
  828. *)
  829.     AuthUnlockLocalIdentityPB* = RECORD
  830.         qLink*:                    Types.Ptr;
  831.         reserved1*:                LONGINT;
  832.         reserved2*:                LONGINT;
  833.         ioCompletion*:            AuthIOCompletionUPP;
  834.         ioResult*:                Types.OSErr;
  835.         saveA5*:                    LONGINT;
  836.         reqCode*:                INTEGER;
  837.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  838.         serverHint*:                AppleTalk.AddrBlock;
  839.         dsRefNum*:                INTEGER;
  840.         callID*:                    LONGINT;
  841.         identity*:                AuthIdentity;
  842.         gReserved1*:                LONGINT;
  843.         gReserved2*:                LONGINT;
  844.         gReserved3*:                LONGINT;
  845.         clientData*:                LONGINT;
  846.         theLocalIdentity*:        LocalIdentity;                            (* <--  LocalIdentity *)
  847.         userName*:                OCE.RStringPtr;                                (*  --> userName *)
  848.         password*:                OCE.RStringPtr;                                (*  -->user password *)
  849.     END;
  850.  
  851. (*
  852. kAuthLockLocalIdentity:
  853. With this call existing LocalIdentity can be locked. If the ASDeleteLocalIdetity
  854. call fails with 'kOCEOperationDenied' error, name will contain the application which
  855. denied the operation. This name will be supplied by the application
  856. when it registered through kAuthAddToLocalIdentityQueue call
  857. *)
  858.     AuthLockLocalIdentityPB* = RECORD
  859.         qLink*:                    Types.Ptr;
  860.         reserved1*:                LONGINT;
  861.         reserved2*:                LONGINT;
  862.         ioCompletion*:            AuthIOCompletionUPP;
  863.         ioResult*:                Types.OSErr;
  864.         saveA5*:                    LONGINT;
  865.         reqCode*:                INTEGER;
  866.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  867.         serverHint*:                AppleTalk.AddrBlock;
  868.         dsRefNum*:                INTEGER;
  869.         callID*:                    LONGINT;
  870.         identity*:                AuthIdentity;
  871.         gReserved1*:                LONGINT;
  872.         gReserved2*:                LONGINT;
  873.         gReserved3*:                LONGINT;
  874.         clientData*:                LONGINT;
  875.         theLocalIdentity*:        LocalIdentity;                            (*  --> LocalIdentity *)
  876.         name*:                    Types.StringPtr;                                (* <--  name of the app which denied delete *)
  877.     END;
  878.  
  879.     NotificationProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; callValue: AuthLocalIdentityOp; actionValue: AuthLocalIdentityLockAction; identity: LocalIdentity): BOOLEAN;
  880.     NotificationUPP* = Types.UniversalProcPtr;
  881.  
  882.     NotificationProc* = NotificationUPP;
  883.  
  884. (*
  885. kAuthAddToLocalIdentityQueue:
  886. An application requiring notification of locking/unlocking of the
  887. LocalIdentity can install itself using this call. The function provided
  888. in 'notifyProc' will be called whenever the requested event happens.
  889. When an AuthLockLocalIdentity call is made to the toolbox, the notificationProc
  890. will be called with 'kAuthLockPending'. The application may refuse the lock by returning
  891. a LONG("true") value. If all the registered entries return 'false' value, locking will be done
  892. successfully. Otherwise 'kOCEOperationDenied' error is returned to the caller. The appName
  893. (registered with the notificationProc) of the application which denied locking is also
  894. returned to the caller making the AuthLockIdentity call.
  895. *)
  896.     AuthAddToLocalIdentityQueuePB* = RECORD
  897.         qLink*:                    Types.Ptr;
  898.         reserved1*:                LONGINT;
  899.         reserved2*:                LONGINT;
  900.         ioCompletion*:            AuthIOCompletionUPP;
  901.         ioResult*:                Types.OSErr;
  902.         saveA5*:                    LONGINT;
  903.         reqCode*:                INTEGER;
  904.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  905.         serverHint*:                AppleTalk.AddrBlock;
  906.         dsRefNum*:                INTEGER;
  907.         callID*:                    LONGINT;
  908.         identity*:                AuthIdentity;
  909.         gReserved1*:                LONGINT;
  910.         gReserved2*:                LONGINT;
  911.         gReserved3*:                LONGINT;
  912.         clientData*:                LONGINT;
  913.         notifyProc*:                NotificationUPP;                        (*  --> notification procedure *)
  914.         notifyFlags*:            AuthNotifications;                        (*  --> notifyFlags *)
  915.         appName*:                Types.StringPtr;                                (*  --> name of application to be returned in Delete/Stop *)
  916.     END;
  917.  
  918. (*
  919. kAuthRemoveFromLocalIdentityQueue:*)
  920.     AuthRemoveFromLocalIdentityQueuePB* = RECORD
  921.         qLink*:                    Types.Ptr;
  922.         reserved1*:                LONGINT;
  923.         reserved2*:                LONGINT;
  924.         ioCompletion*:            AuthIOCompletionUPP;
  925.         ioResult*:                Types.OSErr;
  926.         saveA5*:                    LONGINT;
  927.         reqCode*:                INTEGER;
  928.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  929.         serverHint*:                AppleTalk.AddrBlock;
  930.         dsRefNum*:                INTEGER;
  931.         callID*:                    LONGINT;
  932.         identity*:                AuthIdentity;
  933.         gReserved1*:                LONGINT;
  934.         gReserved2*:                LONGINT;
  935.         gReserved3*:                LONGINT;
  936.         clientData*:                LONGINT;
  937.         notifyProc*:                NotificationUPP;                        (*  --> notification procedure *)
  938.     END;
  939.  
  940. (*
  941. kAuthSetupLocalIdentity:
  942. The LocalIdentity can be Setup using this call.
  943. The userName and password correspond to the LocalIdentity setup.
  944. If a LocalIdentity Setup already exists 'kOCELocalIdentitySetupExists' error
  945. will be returned.
  946. *)
  947.     AuthSetupLocalIdentityPB* = RECORD
  948.         qLink*:                    Types.Ptr;
  949.         reserved1*:                LONGINT;
  950.         reserved2*:                LONGINT;
  951.         ioCompletion*:            AuthIOCompletionUPP;
  952.         ioResult*:                Types.OSErr;
  953.         saveA5*:                    LONGINT;
  954.         reqCode*:                INTEGER;
  955.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  956.         serverHint*:                AppleTalk.AddrBlock;
  957.         dsRefNum*:                INTEGER;
  958.         callID*:                    LONGINT;
  959.         identity*:                AuthIdentity;
  960.         gReserved1*:                LONGINT;
  961.         gReserved2*:                LONGINT;
  962.         gReserved3*:                LONGINT;
  963.         clientData*:                LONGINT;
  964.         aReserved*:                LONGINT;                                (*  --  *)
  965.         userName*:                OCE.RStringPtr;                                (*  --> userName *)
  966.         password*:                OCE.RStringPtr;                                (*  -->user password *)
  967.     END;
  968.  
  969. (*
  970. kAuthChangeLocalIdentity:
  971. An existing LocalIdentity  Setup can be changed using this call.
  972. The userName and password correspond to the LocalIdentity setup.
  973. If a LocalIdentity Setup does not exists 'kOCEOCESetupRequired' error
  974. will be returned. The user can use  kAuthSetupLocalIdentity call to setit up.
  975. If the 'password' does not correspond to the existing setup, 'kOCELocalAuthenticationFail'
  976. Types.OSErr will be returned. If successful, LocalID will have new name as 'userName' and
  977. password as 'newPassword' and if any applications has installed into 
  978. LocalIdentityQueue with kNotifyNameChangeMask set, it will be notified with 
  979. kAuthLocalIdentityNameChangeOp action value. 
  980.  
  981. *)
  982.     AuthChangeLocalIdentityPB* = RECORD
  983.         qLink*:                    Types.Ptr;
  984.         reserved1*:                LONGINT;
  985.         reserved2*:                LONGINT;
  986.         ioCompletion*:            AuthIOCompletionUPP;
  987.         ioResult*:                Types.OSErr;
  988.         saveA5*:                    LONGINT;
  989.         reqCode*:                INTEGER;
  990.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  991.         serverHint*:                AppleTalk.AddrBlock;
  992.         dsRefNum*:                INTEGER;
  993.         callID*:                    LONGINT;
  994.         identity*:                AuthIdentity;
  995.         gReserved1*:                LONGINT;
  996.         gReserved2*:                LONGINT;
  997.         gReserved3*:                LONGINT;
  998.         clientData*:                LONGINT;
  999.         aReserved*:                LONGINT;                                (*  --  *)
  1000.         userName*:                OCE.RStringPtr;                                (*  --> userName *)
  1001.         password*:                OCE.RStringPtr;                                (*  --> current password *)
  1002.         newPassword*:            OCE.RStringPtr;                                (*  --> new password *)
  1003.     END;
  1004.  
  1005. (*
  1006. kAuthRemoveLocalIdentity:
  1007. An existing LocalIdentity  Setup can be removed using this call.
  1008. The userName and password correspond to the LocalIdentity setup.
  1009. If a LocalIdentity Setup does not exists 'kOCEOCESetupRequired' error
  1010. will be returned.
  1011. If the 'password' does not correspond to the existing setup, 'kOCELocalAuthenticationFail'
  1012. Types.OSErr will be returned. If successful, LocalIdentity will be removed from the OCE Setup.
  1013. This is a very distructive operation, user must be warned enough before actually making
  1014. this call.
  1015. *)
  1016.     AuthRemoveLocalIdentityPB* = RECORD
  1017.         qLink*:                    Types.Ptr;
  1018.         reserved1*:                LONGINT;
  1019.         reserved2*:                LONGINT;
  1020.         ioCompletion*:            AuthIOCompletionUPP;
  1021.         ioResult*:                Types.OSErr;
  1022.         saveA5*:                    LONGINT;
  1023.         reqCode*:                INTEGER;
  1024.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1025.         serverHint*:                AppleTalk.AddrBlock;
  1026.         dsRefNum*:                INTEGER;
  1027.         callID*:                    LONGINT;
  1028.         identity*:                AuthIdentity;
  1029.         gReserved1*:                LONGINT;
  1030.         gReserved2*:                LONGINT;
  1031.         gReserved3*:                LONGINT;
  1032.         clientData*:                LONGINT;
  1033.         aReserved*:                LONGINT;                                (*  --  *)
  1034.         userName*:                OCE.RStringPtr;                                (*  --> userName *)
  1035.         password*:                OCE.RStringPtr;                                (*  --> current password *)
  1036.     END;
  1037.  
  1038. (*
  1039. kOCESetupAddDirectoryInfo:
  1040. Using this call identity for a catalog can be setup under LocalIdentity umbrella.
  1041. ASCreateLocalIdentity should have been done succesfully before making this call.
  1042. directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or
  1043. DirAddDSAMDirectory call was made.
  1044. rid-> is the recordID in which the identity for the catalog will be established.
  1045. password-> the password associated with the rid in the catalog world.
  1046. *)
  1047.     OCESetupAddDirectoryInfoPB* = RECORD
  1048.         qLink*:                    Types.Ptr;
  1049.         reserved1*:                LONGINT;
  1050.         reserved2*:                LONGINT;
  1051.         ioCompletion*:            AuthIOCompletionUPP;
  1052.         ioResult*:                Types.OSErr;
  1053.         saveA5*:                    LONGINT;
  1054.         reqCode*:                INTEGER;
  1055.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1056.         serverHint*:                AppleTalk.AddrBlock;
  1057.         dsRefNum*:                INTEGER;
  1058.         callID*:                    LONGINT;
  1059.         identity*:                AuthIdentity;
  1060.         gReserved1*:                LONGINT;
  1061.         gReserved2*:                LONGINT;
  1062.         gReserved3*:                LONGINT;
  1063.         clientData*:                LONGINT;
  1064.         directoryRecordCID*:        OCE.CreationID;                                (*  --> CreationID for the catalog *)
  1065.         recordID*:                OCE.RecordIDPtr;                            (*  --> recordID for the identity *)
  1066.         password*:                OCE.RStringPtr;                                (*  --> password in the catalog world *)
  1067.     END;
  1068.  
  1069. (*
  1070. kOCESetupChangeDirectoryInfo:
  1071. Using this call an existing identity for a catalog under LocalIdentity umbrella
  1072. can be changed.
  1073. ASCreateLocalIdentity should have been done succesfully before making this call.
  1074. directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or
  1075. DirAddDSAMDirectory call was made.
  1076. rid-> is the recordID in which the identity for the catalog will be established.
  1077. password-> the password associated with the rid in the catalog world.
  1078. newPassword -> the new password for the catalog
  1079. *)
  1080.     OCESetupChangeDirectoryInfoPB* = RECORD
  1081.         qLink*:                    Types.Ptr;
  1082.         reserved1*:                LONGINT;
  1083.         reserved2*:                LONGINT;
  1084.         ioCompletion*:            AuthIOCompletionUPP;
  1085.         ioResult*:                Types.OSErr;
  1086.         saveA5*:                    LONGINT;
  1087.         reqCode*:                INTEGER;
  1088.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1089.         serverHint*:                AppleTalk.AddrBlock;
  1090.         dsRefNum*:                INTEGER;
  1091.         callID*:                    LONGINT;
  1092.         identity*:                AuthIdentity;
  1093.         gReserved1*:                LONGINT;
  1094.         gReserved2*:                LONGINT;
  1095.         gReserved3*:                LONGINT;
  1096.         clientData*:                LONGINT;
  1097.         directoryRecordCID*:        OCE.CreationID;                                (*  --> OCE.CreationID for the catalog *)
  1098.         recordID*:                OCE.RecordIDPtr;                            (*  --> recordID for the identity *)
  1099.         password*:                OCE.RStringPtr;                                (*  --> password in the catalog world *)
  1100.         newPassword*:            OCE.RStringPtr;                                (*  --> new password in the catalog *)
  1101.     END;
  1102.  
  1103. (*
  1104. kOCESetupRemoveDirectoryInfo:
  1105. Using this call an existing identity for a catalog under LocalIdentity umbrella
  1106. can be changed.
  1107. ASCreateLocalIdentity should have been done succesfully before making this call.
  1108. directoryRecordCID -> is the record creationID obtained when DirAddOCEDirectory or
  1109. *)
  1110.     OCESetupRemoveDirectoryInfoPB* = RECORD
  1111.         qLink*:                    Types.Ptr;
  1112.         reserved1*:                LONGINT;
  1113.         reserved2*:                LONGINT;
  1114.         ioCompletion*:            AuthIOCompletionUPP;
  1115.         ioResult*:                Types.OSErr;
  1116.         saveA5*:                    LONGINT;
  1117.         reqCode*:                INTEGER;
  1118.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1119.         serverHint*:                AppleTalk.AddrBlock;
  1120.         dsRefNum*:                INTEGER;
  1121.         callID*:                    LONGINT;
  1122.         identity*:                AuthIdentity;
  1123.         gReserved1*:                LONGINT;
  1124.         gReserved2*:                LONGINT;
  1125.         gReserved3*:                LONGINT;
  1126.         clientData*:                LONGINT;
  1127.         directoryRecordCID*:        OCE.CreationID;                                (*  --> OCE.CreationID for the catalog *)
  1128.     END;
  1129.  
  1130. (*
  1131. kOCESetupGetDirectoryInfo:
  1132. Using this call info on an existing identity for a particular catalog under LocalIdentity umbrella
  1133. can be obtained.
  1134. For the specified catalog 'directoryName' and 'discriminator', rid and nativeName will
  1135. returned. Caller must provide appropriate buffer to get back rid and nativeName.
  1136. 'password' will be returned  for  non-ADAP Catalogs.
  1137. *)
  1138.     OCESetupGetDirectoryInfoPB* = RECORD
  1139.         qLink*:                    Types.Ptr;
  1140.         reserved1*:                LONGINT;
  1141.         reserved2*:                LONGINT;
  1142.         ioCompletion*:            AuthIOCompletionUPP;
  1143.         ioResult*:                Types.OSErr;
  1144.         saveA5*:                    LONGINT;
  1145.         reqCode*:                INTEGER;
  1146.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1147.         serverHint*:                AppleTalk.AddrBlock;
  1148.         dsRefNum*:                INTEGER;
  1149.         callID*:                    LONGINT;
  1150.         identity*:                AuthIdentity;
  1151.         gReserved1*:                LONGINT;
  1152.         gReserved2*:                LONGINT;
  1153.         gReserved3*:                LONGINT;
  1154.         clientData*:                LONGINT;
  1155.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  1156.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminator for the catalog *)
  1157.         recordID*:                OCE.RecordIDPtr;                            (* <--  rid for the catalog identity *)
  1158.         nativeName*:                OCE.RStringPtr;                                (* <--  user name in the catalog world *)
  1159.         password*:                OCE.RStringPtr;                                (* <--  password in the catalog world *)
  1160.     END;
  1161.  
  1162. (*****************************************************************************
  1163.  
  1164.  
  1165.          Catalog Manager operations
  1166.  
  1167.  
  1168. *****************************************************************************)
  1169.     DirParamBlockPtr* = POINTER TO DirParamBlock;
  1170.  
  1171.     DirIOCompletionProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (paramBlock: DirParamBlockPtr);
  1172.     DirIOCompletionUPP* = Types.UniversalProcPtr;
  1173.  
  1174.     DirAddRecordPB* = RECORD
  1175.         qLink*:                    Types.Ptr;
  1176.         reserved1*:                LONGINT;
  1177.         reserved2*:                LONGINT;
  1178.         ioCompletion*:            DirIOCompletionUPP;
  1179.         ioResult*:                Types.OSErr;
  1180.         saveA5*:                    LONGINT;
  1181.         reqCode*:                INTEGER;
  1182.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1183.         serverHint*:                AppleTalk.AddrBlock;
  1184.         dsRefNum*:                INTEGER;
  1185.         callID*:                    LONGINT;
  1186.         identity*:                AuthIdentity;
  1187.         gReserved1*:                LONGINT;
  1188.         gReserved2*:                LONGINT;
  1189.         gReserved3*:                LONGINT;
  1190.         clientData*:                LONGINT;
  1191.         aRecord*:                OCE.RecordIDPtr;                            (*  --> OCE.CreationID returned here *)
  1192.         allowDuplicate*:            BOOLEAN;                                (*  --> *)
  1193.         filler1*:                BOOLEAN;
  1194.     END;
  1195.  
  1196. (* DeleteRecord *)
  1197.     DirDeleteRecordPB* = RECORD
  1198.         qLink*:                    Types.Ptr;
  1199.         reserved1*:                LONGINT;
  1200.         reserved2*:                LONGINT;
  1201.         ioCompletion*:            DirIOCompletionUPP;
  1202.         ioResult*:                Types.OSErr;
  1203.         saveA5*:                    LONGINT;
  1204.         reqCode*:                INTEGER;
  1205.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1206.         serverHint*:                AppleTalk.AddrBlock;
  1207.         dsRefNum*:                INTEGER;
  1208.         callID*:                    LONGINT;
  1209.         identity*:                AuthIdentity;
  1210.         gReserved1*:                LONGINT;
  1211.         gReserved2*:                LONGINT;
  1212.         gReserved3*:                LONGINT;
  1213.         clientData*:                LONGINT;
  1214.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  1215.     END;
  1216.  
  1217. (* aRecord must contain valid PackedRLI and a OCE.CreationID. *)
  1218. (**********************************************************************************)
  1219. (*
  1220. DirEnumerate:
  1221. This call can be used to enumerate both DNodes and records under a specified
  1222. DNode. A DNode is specified by the OCE.PackedRLIPtr LONG("aRLI").
  1223.  
  1224. startingPoint indicates where to start the enumeration.  Initially,
  1225. it should be set to a value of nil.  After some records are enumerated,
  1226. the client can issue the call again with the same aRLI and recordName and
  1227. typeList. The last received DirEnumSpec in the startingPoint field.  The server
  1228. will continue the enumeration from that record on. if user wants to get back the
  1229. value specified in the startingRecord also, the Boolean 'includeStartingPoint'
  1230. must be set to LONG("true"). If this is set to 'false', records specified after the
  1231. startingPoint record will be returned.
  1232.  
  1233. sortBy indicates to the server to return the records that match in name-first
  1234. or type-first order.  sortDirection indicates to the server to search in forward
  1235. or backward sort order for RecordIDs Specified.
  1236.  
  1237. RecordIDS and Enumeration Criteria*:
  1238.  
  1239. OCE.PackedRLIPtr parameter LONG("aRLI") will be accepted for DNode
  1240. specification.
  1241.  
  1242. One RStringPtr 'nameMatchString' is provided. User is allowed to
  1243. specify a wild card in the name. WildCard specification is specified in 
  1244. matchNameHow parameter and possible values are defined in DirMatchWith Enum.
  1245.  
  1246. 'typeCount' parameter indicate how many types are in the 'typeList'.
  1247.  
  1248. 'typeList' parmeter is a pointer to an RString array of size 'typeCount'.
  1249.  
  1250. If 'typeCount' is exactly equal to one, a wild card can be specified
  1251. for the entity type; otherwise types have to be completely specified.
  1252. WildCard specification is specified in  matchNameHow parameter
  1253.  and possible values are defined in DirMatchWith Enum.
  1254.  
  1255.  
  1256. A nil value for 'startingPoint' is allowed when sortDirection specified
  1257. is 'kSortBackwards'. This was not allowed previously.
  1258.  
  1259. 'enumFlags' parameter is a bit field. The following bits can be set*:
  1260.     kEnumDistinguishedNameMask to get back records in the cluster data base.
  1261.     kEnumAliasMask to get back record aliases
  1262.     kEnumPseudonymMask to get back record pseudonyms
  1263.     kEnumDNodeMask to get back any children dNodes for the DNode specified in the
  1264.     LONG("aRLI") parameter.
  1265.     kEnumForeignDNodeMask to get back any children dNodes which have ForeignDnodes in the
  1266.     dNode specified in the LONG("aRLI") parameter.
  1267.  
  1268.     kEnumAll is combination of all five values and can be used to enumerate
  1269.     everything under a specified DNode.
  1270.  
  1271.  
  1272.  
  1273. The results returned for each element will consist of a DirEnumSpec.
  1274. The DirEnumSpec contains 'enumFlag' which indicates the type of entity and a
  1275. union which will have either DNodeID or LocalRecordID depending on the value of 'enumFlag'.
  1276. The 'enumFlag'  will indicate whether the returned element is a
  1277. record(kEnumDistinguishedNameMask bit) or a alias(kEnumAliasMask bit) or a
  1278. Pseudonym(kEnumPseudonymMask) or a child DNode(kEnumDNodeMask bit).  If the 'enumFlag' value
  1279. is kEnumDnodeMask, it indicates the value returned in the union is a DNodeID (i.e. 'dNodeNumber'
  1280. is the 'dNodeNumber' of the child dnode(if the catalog supports dNodeNumbers, otherwise
  1281. this will be set to zero). The name will be the child dnode name. For other values of the
  1282. 'enumFlag', the value in the union will be LocalRecordID. In addition to kEnumDnodeMask it is
  1283. possible that kEnumForeignDNodeMask is also set. This is an advisory bit and application must make
  1284. it's own decision before displaying these records. If catalog supports kSupportIndexRatioMask, it
  1285. may also return the relative position of the record (percentile of total records) in the 
  1286. indexRatio field in EnumSpec.
  1287.  
  1288.  
  1289. responseSLRV will contain the script, language, region and version of the oce sorting software.
  1290. The results will be collected in the 'getBuffer' supplied by the user.
  1291. If buffer can not hold all the data returned 'kOCEMoreData' error will be returned.
  1292.  
  1293. If user receives 'noErrLONG(" or ")kOCEMoreData', buffer will contain valid results. A user
  1294. can extract the results in the 'getBuffer' by making DirEnumerateParse' call.
  1295. *)
  1296.     DirEnumerateGetPB* = RECORD
  1297.         qLink*:                    Types.Ptr;
  1298.         reserved1*:                LONGINT;
  1299.         reserved2*:                LONGINT;
  1300.         ioCompletion*:            DirIOCompletionUPP;
  1301.         ioResult*:                Types.OSErr;
  1302.         saveA5*:                    LONGINT;
  1303.         reqCode*:                INTEGER;
  1304.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1305.         serverHint*:                AppleTalk.AddrBlock;
  1306.         dsRefNum*:                INTEGER;
  1307.         callID*:                    LONGINT;
  1308.         identity*:                AuthIdentity;
  1309.         gReserved1*:                LONGINT;
  1310.         gReserved2*:                LONGINT;
  1311.         gReserved3*:                LONGINT;
  1312.         clientData*:                LONGINT;
  1313.         aRLI*:                    OCE.PackedRLIPtr;                            (*  --> an RLI specifying the cluster to be enumerated *)
  1314.         startingPoint*:            POINTER TO DirEnumSpec;                            (*  --> *)
  1315.         sortBy*:                    DirSortOption;                            (*  --> *)
  1316.         sortDirection*:            DirSortDirection;                        (*  --> *)
  1317.         dReserved*:                LONGINT;                                (*  --  *)
  1318.         nameMatchString*:        OCE.RStringPtr;                                (*  --> name from which enumeration should start *)
  1319.         typesList*:                SYSTEM.PTR (*ΔΔ POINTER TO OCE.RStringPtr*);                            (*  --> list of entity types to be enumerated *)
  1320.         typeCount*:                LONGINT;                                (*  --> number of types in the list *)
  1321.         enumFlags*:                DirEnumChoices;                            (*  --> indicates what to enumerate *)
  1322.         includeStartingPoint*:    BOOLEAN;                                (*  --> if true return the record specified in starting point *)
  1323.         padByte*:                Types.SInt8; (* Types.Byte *)
  1324.         matchNameHow*:            DirMatchWith;                            (*  --> Matching Criteria for nameMatchString *)
  1325.         matchTypeHow*:            DirMatchWith;                            (*  --> Matching Criteria for typeList *)
  1326.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  1327.         getBufferSize*:            LONGINT;                                (*  --> *)
  1328.         responseSLRV*:            SLRV;                                    (*  <--  response SLRV *)
  1329.     END;
  1330.  
  1331. (* The EnumerateRecords call-back function is defined as follows*: *)
  1332.     ForEachDirEnumSpecProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR enumSpec: DirEnumSpec): BOOLEAN;
  1333.     ForEachDirEnumSpecUPP* = Types.UniversalProcPtr;
  1334.  
  1335.     ForEachDirEnumSpec* = ForEachDirEnumSpecUPP;
  1336.  
  1337. (*
  1338. EnumerateParse:
  1339. After an EnumerateGet call has completed, call EnumerateParse
  1340. to parse through the buffer that was filled in EnumerateGet.
  1341.  
  1342. 'eachEnumSpec' will be called each time to return to the client a
  1343. DirEnumSpec that matches the pattern for enumeration. 'enumFlag' indicates the type
  1344. of information returned in the DirEnumSpec
  1345. The clientData parameter that you pass in the parameter block will be passed
  1346. to 'forEachEnumDSSpecFunc'.  You are free to put anything in clientData - it is intended
  1347. to allow you some way to match the call-back to the original call (for
  1348. example, you make more then one aysynchronous EnumerateGet calls and you want to
  1349. associate returned results in some way).
  1350.  
  1351. The client should return FALSE from 'eachEnumSpec' to continue
  1352. processing of the EnumerateParse request.  Returning TRUE will
  1353. terminate the EnumerateParse request.
  1354.  
  1355. For synchronous calls, the call-back routine actually runs as part of the same thread
  1356. of execution as the thread that made the EnumerateParse call.  That means that the
  1357. same low-memory globals, A5, stack, etc. are in effect during the call-back
  1358. that were in effect when the call was made.  Because of this, the call-back
  1359. routine has the same restrictions as the caller of EnumerateParse*:
  1360. if EnumerateParse was not called from interrupt level, then the call-
  1361. back routine can allocate memory. For asynchronous calls, call-back routine is
  1362. like a ioCompletion except that A5 will be preserved for the application.
  1363. *)
  1364.     DirEnumerateParsePB* = RECORD
  1365.         qLink*:                    Types.Ptr;
  1366.         reserved1*:                LONGINT;
  1367.         reserved2*:                LONGINT;
  1368.         ioCompletion*:            DirIOCompletionUPP;
  1369.         ioResult*:                Types.OSErr;
  1370.         saveA5*:                    LONGINT;
  1371.         reqCode*:                INTEGER;
  1372.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1373.         serverHint*:                AppleTalk.AddrBlock;
  1374.         dsRefNum*:                INTEGER;
  1375.         callID*:                    LONGINT;
  1376.         identity*:                AuthIdentity;
  1377.         gReserved1*:                LONGINT;
  1378.         gReserved2*:                LONGINT;
  1379.         gReserved3*:                LONGINT;
  1380.         clientData*:                LONGINT;
  1381.         aRLI*:                    OCE.PackedRLIPtr;                            (*  --> an RLI specifying the cluster to be enumerated *)
  1382.         bReserved*:                LONGINT;                                (*  --  *)
  1383.         cReserved*:                LONGINT;                                (*  --  *)
  1384.         eachEnumSpec*:            ForEachDirEnumSpec;                        (*  --> *)
  1385.         eReserved*:                LONGINT;                                (*  --  *)
  1386.         fReserved*:                LONGINT;                                (*  --  *)
  1387.         gReserved*:                LONGINT;                                (*  --  *)
  1388.         hReserved*:                LONGINT;                                (*  --  *)
  1389.         iReserved*:                LONGINT;                                (*  --  *)
  1390.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  1391.         getBufferSize*:            LONGINT;                                (*  --> *)
  1392.         l1Reserved*:                INTEGER;                                (*  -- *)
  1393.         l2Reserved*:                INTEGER;                                (*  --  *)
  1394.         l3Reserved*:                INTEGER;                                (*  -- *)
  1395.         l4Reserved*:                INTEGER;                                (*  --  *)
  1396.     END;
  1397.  
  1398. (*
  1399.  * FindRecordGet operates similarly to DirEnumerate except it returns a list
  1400.  * of records instead of records local to a cluster.
  1401. *)
  1402.     DirFindRecordGetPB* = RECORD
  1403.         qLink*:                    Types.Ptr;
  1404.         reserved1*:                LONGINT;
  1405.         reserved2*:                LONGINT;
  1406.         ioCompletion*:            DirIOCompletionUPP;
  1407.         ioResult*:                Types.OSErr;
  1408.         saveA5*:                    LONGINT;
  1409.         reqCode*:                INTEGER;
  1410.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1411.         serverHint*:                AppleTalk.AddrBlock;
  1412.         dsRefNum*:                INTEGER;
  1413.         callID*:                    LONGINT;
  1414.         identity*:                AuthIdentity;
  1415.         gReserved1*:                LONGINT;
  1416.         gReserved2*:                LONGINT;
  1417.         gReserved3*:                LONGINT;
  1418.         clientData*:                LONGINT;
  1419.         startingPoint*:            OCE.RecordIDPtr;
  1420.         reservedA*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1421.         nameMatchString*:        OCE.RStringPtr;
  1422.         typesList*:                SYSTEM.PTR (*ΔΔ POINTER TO OCE.RStringPtr*);
  1423.         typeCount*:                LONGINT;
  1424.         reservedB*:                LONGINT;
  1425.         reservedC*:                INTEGER;
  1426.         matchNameHow*:            DirMatchWith;
  1427.         matchTypeHow*:            DirMatchWith;
  1428.         getBuffer*:                Types.Ptr;
  1429.         getBufferSize*:            LONGINT;
  1430.         directoryName*:            OCE.DirectoryNamePtr;
  1431.         discriminator*:            OCE.DirDiscriminator;
  1432.     END;
  1433.  
  1434. (* The FindRecordParse call-back function is defined as follows*: *)
  1435.     ForEachRecordProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR enumSpec: DirEnumSpec; pRLI: OCE.PackedRLIPtr): BOOLEAN;
  1436.     ForEachRecordUPP* = Types.UniversalProcPtr;
  1437.  
  1438.     ForEachRecord* = ForEachRecordUPP;
  1439.  
  1440. (*
  1441.  * This PB same as DirFindRecordGet except it includes the callback function
  1442. *)
  1443.     DirFindRecordParsePB* = RECORD
  1444.         qLink*:                    Types.Ptr;
  1445.         reserved1*:                LONGINT;
  1446.         reserved2*:                LONGINT;
  1447.         ioCompletion*:            DirIOCompletionUPP;
  1448.         ioResult*:                Types.OSErr;
  1449.         saveA5*:                    LONGINT;
  1450.         reqCode*:                INTEGER;
  1451.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1452.         serverHint*:                AppleTalk.AddrBlock;
  1453.         dsRefNum*:                INTEGER;
  1454.         callID*:                    LONGINT;
  1455.         identity*:                AuthIdentity;
  1456.         gReserved1*:                LONGINT;
  1457.         gReserved2*:                LONGINT;
  1458.         gReserved3*:                LONGINT;
  1459.         clientData*:                LONGINT;
  1460.         startingPoint*:            OCE.RecordIDPtr;
  1461.         reservedA*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1462.         nameMatchString*:        OCE.RStringPtr;
  1463.         typesList*:                SYSTEM.PTR (*ΔΔ POINTER TO OCE.RStringPtr*);
  1464.         typeCount*:                LONGINT;
  1465.         reservedB*:                LONGINT;
  1466.         reservedC*:                INTEGER;
  1467.         matchNameHow*:            DirMatchWith;
  1468.         matchTypeHow*:            DirMatchWith;
  1469.         getBuffer*:                Types.Ptr;
  1470.         getBufferSize*:            LONGINT;
  1471.         directoryName*:            OCE.DirectoryNamePtr;
  1472.         discriminator*:            OCE.DirDiscriminator;
  1473.         forEachRecordFunc*:        ForEachRecord;
  1474.     END;
  1475.  
  1476. (*
  1477. LookupGet:
  1478.  
  1479. aRecordList is an array of pointers to RecordIDs, each of which must
  1480. contain valid PackedRLI and a OCE.CreationID.  recordIDCount is
  1481. the size of this array.
  1482.  
  1483. attrTypeList is an array of pointers to AttributeTypes.  attrTypeCount is
  1484. the size of this array.
  1485.  
  1486. staringRecordIndex is the record from which to continue the lookup.
  1487. If you want to start from first record in the list, this must be 1 (not zero).
  1488. This value must always be <= recordIDCount.
  1489.  
  1490. startingAttributeIndex is the AttributeType from which we want to continue the lookup.
  1491. If you want to start from first attribute in the list, this must be 1 (not zero).
  1492. This value must always be <= attrTypeCount.
  1493.  
  1494. startingAttribute is the value of the attribute value from which we want to
  1495. continue lookup. In case of catalogs supporting creationIDs, startingAttribute
  1496. may contain only a CID. Other catalogs may require the entire value.
  1497. If a non-null cid is given and if an attribute value with that cid is not found, this
  1498. call will terminate with kOCENoSuchAttribute error. A client should not make a LookupParse call
  1499. after getting this error.
  1500.  
  1501. 'includeStartingPoint' boolean can be set to LONG("true") to receive the value specified in the
  1502. startingPoint in the results returned. If this is set to 'false', the value
  1503. specified in the startingAttribute will not be returned.
  1504.  
  1505. When LookupGet call fails with kOCEMoreData, the client will be able to find out where the call ended
  1506. with a subsequent LookupParse call. When the LookupParse call completes with kOCEMoreData,
  1507. lastRecordIndex, lastAttributeIndex and lastValueCID will point to the corresponding
  1508. recordID, attributeType and the OCE.CreationID of the last value returned successfully. These parameters
  1509. are exactly the same ones for the startingRecordIndex, startingAttributeIndex, and startingAttrValueCID
  1510. so they can be used in a subsequent LookupGet call to continue the lookup.
  1511.  
  1512. In an extreme case, It is possible that we had an attribute value that is too large to fit
  1513. in the client's buffer. In such cases, if it was the only thing that we tried to fit
  1514. into the buffer, the client will not able to proceed further because he will not know the
  1515. attributeCID of the attribute to continue with.  Also he does not know how big a buffer
  1516. would be needed for the next call to get this 'mondo' attribute value successfully.
  1517.  
  1518. to support this, LookupParse call will do the following*:
  1519.  
  1520. If LookupGet has failed with kOCEMoreData error, LookupParse will check to make sure that
  1521. ForEachAttributeValueFunc has been called at least once. If so, the client has the option
  1522. to continue from that attribute OCE.CreationID (for PAB/ADAP) in the next LookupGet call.
  1523. However, if it was not even called once, then the attribute value may be too big to fit in the
  1524. user's buffer. In this case, lastAttrValueCID (lastAttribute) and attrSize are returned in the
  1525. parse buffer and the call will fail with kOCEMoreAttrValue. However, it is possible that
  1526. ForEachAttributeValue was not called because the user does not have read access to some of
  1527. the attributeTypes in the list, and the buffer was full before even reading the creationID of
  1528. any of the attribute values.  A kOCEMoreData error is returned.
  1529.  
  1530. The Toolbox will check for duplicate RecordIDs in the aRecordList. If found, it will return
  1531. 'daDuplicateRecordIDErr'.
  1532.  
  1533. The Toolbox will check for duplicate AttributeTypes in the attrTypeList. If found it will
  1534. return 'daDuplicateAttrTypeErr'.
  1535. *)
  1536.     DirLookupGetPB* = RECORD
  1537.         qLink*:                    Types.Ptr;
  1538.         reserved1*:                LONGINT;
  1539.         reserved2*:                LONGINT;
  1540.         ioCompletion*:            DirIOCompletionUPP;
  1541.         ioResult*:                Types.OSErr;
  1542.         saveA5*:                    LONGINT;
  1543.         reqCode*:                INTEGER;
  1544.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1545.         serverHint*:                AppleTalk.AddrBlock;
  1546.         dsRefNum*:                INTEGER;
  1547.         callID*:                    LONGINT;
  1548.         identity*:                AuthIdentity;
  1549.         gReserved1*:                LONGINT;
  1550.         gReserved2*:                LONGINT;
  1551.         gReserved3*:                LONGINT;
  1552.         clientData*:                LONGINT;
  1553.         aRecordList*:            SYSTEM.PTR (*ΔΔ POINTER TO OCE.RecordIDPtr*);                            (*  --> an array of RecordID pointers *)
  1554.         attrTypeList*:            SYSTEM.PTR (*ΔΔ POINTER TO AttributeTypePtr*);                        (*  --> an array of attribute types *)
  1555.         cReserved*:                LONGINT;                                (*  --  *)
  1556.         dReserved*:                LONGINT;                                (*  --  *)
  1557.         eReserved*:                LONGINT;                                (*  --  *)
  1558.         fReserved*:                LONGINT;                                (*  --  *)
  1559.         recordIDCount*:            LONGINT;                                (*  --> *)
  1560.         attrTypeCount*:            LONGINT;                                (*  --> *)
  1561.         includeStartingPoint*:    BOOLEAN;                                (*  --> if true return the value specified by the starting indices *)
  1562.         padByte*:                Types.SInt8; (* Types.Byte *)
  1563.         i1Reserved*:                INTEGER;                                (*  --  *)
  1564.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  1565.         getBufferSize*:            LONGINT;                                (*  --> *)
  1566.         startingRecordIndex*:    LONGINT;                                (*  --> start from this record *)
  1567.         startingAttrTypeIndex*:    LONGINT;                                (*  --> start from this attribute type *)
  1568.         startingAttribute*:        OCE.Attribute;                                (*  --> start from this attribute value *)
  1569.         pReserved*:                LONGINT;                                (*  --  *)
  1570.     END;
  1571.  
  1572. (* The Lookup call-back functions are defined as follows*: *)
  1573.     ForEachLookupRecordIDProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR recordID: OCE.RecordID): BOOLEAN;
  1574.     ForEachLookupRecordIDUPP* = Types.UniversalProcPtr;
  1575.  
  1576.     ForEachLookupRecordID* = ForEachLookupRecordIDUPP;
  1577.  
  1578.     ForEachAttrTypeLookupProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR attrType: OCE.AttributeType; myAttrAccMask: AccessMask): BOOLEAN;
  1579.     ForEachAttrTypeLookupUPP* = Types.UniversalProcPtr;
  1580.  
  1581.     ForEachAttrTypeLookup* = ForEachAttrTypeLookupUPP;
  1582.  
  1583.     ForEachAttrValueProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR attribute: OCE.Attribute): BOOLEAN;
  1584.     ForEachAttrValueUPP* = Types.UniversalProcPtr;
  1585.  
  1586.     ForEachAttrValue* = ForEachAttrValueUPP;
  1587.  
  1588. (*
  1589. LookupParse:
  1590.  
  1591. After a LookupGet call has completed, call LookupParse
  1592. to parse through the buffer that was filled in LookupGet.  The
  1593. toolbox will parse through the buffer and call the appropriate call-back routines
  1594. for each item in the getBuffer.
  1595.  
  1596. 'eachRecordID' will be called each time to return to the client one of the
  1597. RecordIDs from aRecordList.  The clientData parameter that you
  1598. pass in the parameter block will be passed to eachRecordID.
  1599. You are free to put anything in clientData - it is intended to allow
  1600. you some way to match the call-back to the original call (in case, for
  1601. example, you make simultaneous asynchronous LookupGet calls).  If you don't
  1602. want to get a call-back for each RecordID (for example, if you're looking up
  1603. attributes for only one RecordID), pass nil for eachRecordID.
  1604.  
  1605. After forEachLocalRecordIDFunc is called, eachAttrType may be called to pass an
  1606. attribute type (one from attrTypeList) that exists in the record specified
  1607. in the last eachRecordID call.  If you don't want to get a call-back for
  1608. each AttributeType (for example, if you're looking up only one attribute type,
  1609. or you prefer to read the type from the OCE.Attribute struct during the eachAttrValue
  1610. call-back routine), pass nil for eachAttrType. However access controls may
  1611. prohibit you from reading some attribute types; in that case eachAttrValue
  1612. may not be called even though the value exists. Hence the client should
  1613. supply this call-back function to see the access controls for each attribute type.
  1614.  
  1615. This will be followed by one or more calls to eachAttrValue, to pass the
  1616. type, tag, and attribute value.  NOTE THIS CHANGE*:  you are no longer expected to
  1617. pass a pointer to a buffer in which to put the value.  Now you get a pointer to
  1618. the value, and you can process it within the call-back routine.
  1619. After one or more values are returned, eachAttrType may be called again to pass
  1620. another attribute type that exists in the last-specified RecordID.
  1621.  
  1622. The client should return FALSE from eachRecordID, eachAttrType, and
  1623. eachAttrValue to continue processing of the LookupParse request.  Returning TRUE
  1624. from any call-back will terminate the LookupParse request.
  1625.  
  1626. If LookupGet has failed with kOCEMoreData error, LookupParse will check to make sure that
  1627. ForEachAttributeValueFunc has been called at least once. If so, the client has the option
  1628. to continue from that attribute OCE.CreationID (for PAB/ADAP) in the next LookupGet call.
  1629. However, if it was not even called once, then the attribute value may be too big to fit in the
  1630. user's buffer. In this case, lastAttrValueCID (lastAttribute) and attrSize are returned in the
  1631. parse buffer and the call will fail with kOCEMoreAttrValue. However, it is possible that
  1632. ForEachAttributeValue was not called because the user does not have read access to some of
  1633. the attributeTypes in the list, and the buffer was full before even reading the creationID of
  1634. any of the attribute values.  A kOCEMoreData error is returned.
  1635.  
  1636. For synchronous calls, the call-back routine actually runs as part of the same thread
  1637. of execution as the thread that made the LookupParse call.  That means that the
  1638. same low-memory globals, A5, stack, etc. are in effect during the call-back
  1639. that were in effect when the call was made.  Because of this, the call-back
  1640. routine has the same restrictions as the caller of LookupParse*:
  1641. if LookupParse was not called from interrupt level, then the call-
  1642. back routine can allocate memory. For asynchronous calls, call-back routine is
  1643. like a ioCompletion except that A5 will be preserved for the application.
  1644. *)
  1645.     DirLookupParsePB* = RECORD
  1646.         qLink*:                    Types.Ptr;
  1647.         reserved1*:                LONGINT;
  1648.         reserved2*:                LONGINT;
  1649.         ioCompletion*:            DirIOCompletionUPP;
  1650.         ioResult*:                Types.OSErr;
  1651.         saveA5*:                    LONGINT;
  1652.         reqCode*:                INTEGER;
  1653.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1654.         serverHint*:                AppleTalk.AddrBlock;
  1655.         dsRefNum*:                INTEGER;
  1656.         callID*:                    LONGINT;
  1657.         identity*:                AuthIdentity;
  1658.         gReserved1*:                LONGINT;
  1659.         gReserved2*:                LONGINT;
  1660.         gReserved3*:                LONGINT;
  1661.         clientData*:                LONGINT;
  1662.         aRecordList*:            SYSTEM.PTR (*ΔΔ POINTER TO OCE.RecordIDPtr*);                            (*  --> must be same from the corresponding Get call *)
  1663.         attrTypeList*:            SYSTEM.PTR (*ΔΔ POINTER TO AttributeTypePtr*);                        (*  --> must be same from the corresponding Get call *)
  1664.         cReserved*:                LONGINT;                                (*  --  *)
  1665.         eachRecordID*:            ForEachLookupRecordID;                    (*  --> *)
  1666.         eachAttrType*:            ForEachAttrTypeLookup;                    (*  --> *)
  1667.         eachAttrValue*:            ForEachAttrValue;                        (*  --> *)
  1668.         recordIDCount*:            LONGINT;                                (*  --> must be same from the corresponding Get call *)
  1669.         attrTypeCount*:            LONGINT;                                (*  --> must be same from the corresponding Get call *)
  1670.         iReserved*:                LONGINT;                                (*  --  *)
  1671.         getBuffer*:                Types.Ptr;                                    (*  --> must be same from the corresponding Get call*)
  1672.         getBufferSize*:            LONGINT;                                (*  --> must be same from the corresponding Get call*)
  1673.         lastRecordIndex*:        LONGINT;                                (* <--  last RecordID processed when parse completed *)
  1674.         lastAttributeIndex*:        LONGINT;                                (* <--  last OCE.Attribute Type processed when parse completed *)
  1675.         lastAttribute*:            OCE.Attribute;                                (* <--  last attribute value (with this OCE.CreationID) processed when parse completed *)
  1676.         attrSize*:                LONGINT;                                (* <--  length of the attribute we did not return *)
  1677.     END;
  1678.  
  1679. (* AddAttributeValue *)
  1680.     DirAddAttributeValuePB* = RECORD
  1681.         qLink*:                    Types.Ptr;
  1682.         reserved1*:                LONGINT;
  1683.         reserved2*:                LONGINT;
  1684.         ioCompletion*:            DirIOCompletionUPP;
  1685.         ioResult*:                Types.OSErr;
  1686.         saveA5*:                    LONGINT;
  1687.         reqCode*:                INTEGER;
  1688.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1689.         serverHint*:                AppleTalk.AddrBlock;
  1690.         dsRefNum*:                INTEGER;
  1691.         callID*:                    LONGINT;
  1692.         identity*:                AuthIdentity;
  1693.         gReserved1*:                LONGINT;
  1694.         gReserved2*:                LONGINT;
  1695.         gReserved3*:                LONGINT;
  1696.         clientData*:                LONGINT;
  1697.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  1698.         attr*:                    OCE.AttributePtr;                            (*  --> AttributeCreationID returned here *)
  1699.     END;
  1700.  
  1701. (*
  1702. aRecord must contain valid PackedRLI and a OCE.CreationID.
  1703.  
  1704. Instead of passing type, length, and value in three separate
  1705. fields, we take a pointer to an OCE.Attribute structure that contains
  1706. all three, and has room for the AttributeCreationNumber.
  1707. The AttributeCreationID will be returned in the attr itself.
  1708.  
  1709. The AttributeTag tells the catalog service that the attribute is an RString,
  1710. binary, or a RecordID.
  1711. *)
  1712. (*
  1713. DeleteAttributeType:
  1714. This call is provided so that an existing AttributeType can be deleted.
  1715. If any attribute values exist for this type, they will all be deleted
  1716. (if the user has access rights to delete the values) and then the attribute type
  1717. will be deleted. Otherwise dsAccessDenied error will be returned.
  1718. *)
  1719.     DirDeleteAttributeTypePB* = RECORD
  1720.         qLink*:                    Types.Ptr;
  1721.         reserved1*:                LONGINT;
  1722.         reserved2*:                LONGINT;
  1723.         ioCompletion*:            DirIOCompletionUPP;
  1724.         ioResult*:                Types.OSErr;
  1725.         saveA5*:                    LONGINT;
  1726.         reqCode*:                INTEGER;
  1727.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1728.         serverHint*:                AppleTalk.AddrBlock;
  1729.         dsRefNum*:                INTEGER;
  1730.         callID*:                    LONGINT;
  1731.         identity*:                AuthIdentity;
  1732.         gReserved1*:                LONGINT;
  1733.         gReserved2*:                LONGINT;
  1734.         gReserved3*:                LONGINT;
  1735.         clientData*:                LONGINT;
  1736.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  1737.         attrType*:                OCE.AttributeTypePtr;                        (*  --> *)
  1738.     END;
  1739.  
  1740. (*
  1741.     DeleteAttributeValue
  1742. *)
  1743.     DirDeleteAttributeValuePB* = RECORD
  1744.         qLink*:                    Types.Ptr;
  1745.         reserved1*:                LONGINT;
  1746.         reserved2*:                LONGINT;
  1747.         ioCompletion*:            DirIOCompletionUPP;
  1748.         ioResult*:                Types.OSErr;
  1749.         saveA5*:                    LONGINT;
  1750.         reqCode*:                INTEGER;
  1751.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1752.         serverHint*:                AppleTalk.AddrBlock;
  1753.         dsRefNum*:                INTEGER;
  1754.         callID*:                    LONGINT;
  1755.         identity*:                AuthIdentity;
  1756.         gReserved1*:                LONGINT;
  1757.         gReserved2*:                LONGINT;
  1758.         gReserved3*:                LONGINT;
  1759.         clientData*:                LONGINT;
  1760.         aRecord*:                OCE.RecordIDPtr;                            (*  -> *)
  1761.         attr*:                    OCE.AttributePtr;                            (*  -> *)
  1762.     END;
  1763.  
  1764. (*
  1765.     ChangeAttributeValue*:
  1766.     currentAttr ==> the attribute to be changed. For ADAS and PAB OCE.CreationID is
  1767.                     sufficient
  1768.     newAttr     ==> new value for the attribute. For ADAS and PAB 
  1769.                     OCE.CreationID field will be set when
  1770.                     the call succeesfully completes
  1771.     
  1772.     aRecord     ==> must contain valid PackedRecordLocationInfo and a OCE.CreationID.
  1773.  
  1774.  
  1775.     
  1776. *)
  1777.     DirChangeAttributeValuePB* = RECORD
  1778.         qLink*:                    Types.Ptr;
  1779.         reserved1*:                LONGINT;
  1780.         reserved2*:                LONGINT;
  1781.         ioCompletion*:            DirIOCompletionUPP;
  1782.         ioResult*:                Types.OSErr;
  1783.         saveA5*:                    LONGINT;
  1784.         reqCode*:                INTEGER;
  1785.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1786.         serverHint*:                AppleTalk.AddrBlock;
  1787.         dsRefNum*:                INTEGER;
  1788.         callID*:                    LONGINT;
  1789.         identity*:                AuthIdentity;
  1790.         gReserved1*:                LONGINT;
  1791.         gReserved2*:                LONGINT;
  1792.         gReserved3*:                LONGINT;
  1793.         clientData*:                LONGINT;
  1794.         aRecord*:                OCE.RecordIDPtr;                            (*  -> *)
  1795.         currentAttr*:            OCE.AttributePtr;                            (*  -> *)
  1796.         newAttr*:                OCE.AttributePtr;                            (*  -> *)
  1797.     END;
  1798.  
  1799. (* VerifyAttributeValue *)
  1800.     DirVerifyAttributeValuePB* = RECORD
  1801.         qLink*:                    Types.Ptr;
  1802.         reserved1*:                LONGINT;
  1803.         reserved2*:                LONGINT;
  1804.         ioCompletion*:            DirIOCompletionUPP;
  1805.         ioResult*:                Types.OSErr;
  1806.         saveA5*:                    LONGINT;
  1807.         reqCode*:                INTEGER;
  1808.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1809.         serverHint*:                AppleTalk.AddrBlock;
  1810.         dsRefNum*:                INTEGER;
  1811.         callID*:                    LONGINT;
  1812.         identity*:                AuthIdentity;
  1813.         gReserved1*:                LONGINT;
  1814.         gReserved2*:                LONGINT;
  1815.         gReserved3*:                LONGINT;
  1816.         clientData*:                LONGINT;
  1817.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  1818.         attr*:                    OCE.AttributePtr;                            (*  --> *)
  1819.     END;
  1820.  
  1821. (*
  1822. aRecord must contain valid PackedRLI and a OCE.CreationID.
  1823.  
  1824. The attribute type and value are passed in the attribute structure.  If the
  1825. attribute OCE.CreationID is non-zero, the server will verify that an attribute with
  1826. the specified value and creation number exists in aRecord.  If the attribute
  1827. OCE.CreationID is zero, the server will verify the attribute by type and value
  1828. alone, and return the attribute OCE.CreationID in the OCE.Attribute struct if the
  1829. attribute exists.
  1830. *)
  1831. (*
  1832. EnumerateAttributeTypesGet:
  1833. The following two calls can be used to enumerate the attribute types present in
  1834. a specified RecordID.  The first, EnumerateAttributeTypesGet, processes the request
  1835. and reads the response into getBuffer, as much as will fit.  A kOCEMoreData error will
  1836. be returned if the buffer was not large enough.  After this call completes, the
  1837. client can call EnumerateAttributeTypesParse (see below).
  1838.  
  1839. The user will able to continue from a startingPoint by setting a startingAttrType.
  1840. Typically, this should be the last value returned in EnumerateAttributeTypesParse call
  1841. when 'kOCEMoreData' is returned.
  1842.  
  1843. If 'includeStartingPoint' is true when a 'startingAttrType' is specified, the starting value
  1844. will be included in the results, if it exists. If this is set to false, this value will not
  1845. be included. AttributeTypes following this type will be returned.
  1846. *)
  1847.     DirEnumerateAttributeTypesGetPB* = RECORD
  1848.         qLink*:                    Types.Ptr;
  1849.         reserved1*:                LONGINT;
  1850.         reserved2*:                LONGINT;
  1851.         ioCompletion*:            DirIOCompletionUPP;
  1852.         ioResult*:                Types.OSErr;
  1853.         saveA5*:                    LONGINT;
  1854.         reqCode*:                INTEGER;
  1855.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1856.         serverHint*:                AppleTalk.AddrBlock;
  1857.         dsRefNum*:                INTEGER;
  1858.         callID*:                    LONGINT;
  1859.         identity*:                AuthIdentity;
  1860.         gReserved1*:                LONGINT;
  1861.         gReserved2*:                LONGINT;
  1862.         gReserved3*:                LONGINT;
  1863.         clientData*:                LONGINT;
  1864.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  1865.         startingAttrType*:        OCE.AttributeTypePtr;                        (*  --> starting point *)
  1866.         cReserved*:                LONGINT;                                (*  --  *)
  1867.         dReserved*:                LONGINT;                                (*  --  *)
  1868.         eReserved*:                LONGINT;                                (*  --  *)
  1869.         fReserved*:                LONGINT;                                (*  --  *)
  1870.         gReserved*:                LONGINT;                                (*  --  *)
  1871.         hReserved*:                LONGINT;                                (*  --  *)
  1872.         includeStartingPoint*:    BOOLEAN;                                (*  --> if true return the attrType specified by starting point *)
  1873.         padByte*:                Types.SInt8; (* Types.Byte *)
  1874.         i1Reserved*:                INTEGER;                                (*  --  *)
  1875.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  1876.         getBufferSize*:            LONGINT;                                (*  --> *)
  1877.     END;
  1878.  
  1879. (* The call-back function is defined as follows*: *)
  1880.     ForEachAttrTypeProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR attrType: OCE.AttributeType): BOOLEAN;
  1881.     ForEachAttrTypeUPP* = Types.UniversalProcPtr;
  1882.  
  1883.     ForEachAttrType* = ForEachAttrTypeUPP;
  1884.  
  1885. (*
  1886. EnumerateAttributeTypesParse:
  1887. After an EnumerateAttributeTypesGet call has completed, call EnumerateAttributeTypesParse
  1888. to parse through the buffer that was filled in EnumerateAttributeTypesGet.  The
  1889. toolbox will parse through the buffer and call the call-back routine for
  1890. each attribute type in the getBuffer.
  1891.  
  1892. The client should return false from eachAttrType to continue
  1893. processing of the EnumerateAttributeTypesParse request.  Returning true will
  1894. terminate the EnumerateAttributeTypesParse request.  The clientData parameter that
  1895. you pass in the parameter block will be passed to eachAttrType.
  1896. You are free to put anything in clientData - it is intended to allow
  1897. you some way to match the call-back to the original call (in case, for
  1898. example, you make simultaneous asynchronous calls).
  1899.  
  1900. For synchronous calls, the call-back routine actually runs as part of the same thread
  1901. of execution as the thread that made the EnumerateAttributeTypesParse call.  That means that the
  1902. same low-memory globals, A5, stack, etc. are in effect during the call-back
  1903. that were in effect when the call was made.  Because of this, the call-back
  1904. routine has the same restrictions as the caller of EnumerateAttributeTypesParse.
  1905. If EnumerateAttributeTypesParse was not called from interrupt level, then the call-
  1906. back routine can allocate memory. For asynchronous calls, call-back routine is
  1907. like a ioCompletion except that A5 will be preserved for the application.
  1908. *)
  1909.     DirEnumerateAttributeTypesParsePB* = RECORD
  1910.         qLink*:                    Types.Ptr;
  1911.         reserved1*:                LONGINT;
  1912.         reserved2*:                LONGINT;
  1913.         ioCompletion*:            DirIOCompletionUPP;
  1914.         ioResult*:                Types.OSErr;
  1915.         saveA5*:                    LONGINT;
  1916.         reqCode*:                INTEGER;
  1917.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1918.         serverHint*:                AppleTalk.AddrBlock;
  1919.         dsRefNum*:                INTEGER;
  1920.         callID*:                    LONGINT;
  1921.         identity*:                AuthIdentity;
  1922.         gReserved1*:                LONGINT;
  1923.         gReserved2*:                LONGINT;
  1924.         gReserved3*:                LONGINT;
  1925.         clientData*:                LONGINT;
  1926.         aRecord*:                OCE.RecordIDPtr;                            (*  --> Same as DirEnumerateAttributeTypesGetPB *)
  1927.         bReserved*:                LONGINT;                                (*  --  *)
  1928.         cReserved*:                LONGINT;                                (*  --  *)
  1929.         dReserved*:                LONGINT;                                (*  --  *)
  1930.         eachAttrType*:            ForEachAttrType;                        (*  --> *)
  1931.         fReserved*:                LONGINT;                                (*  --  *)
  1932.         gReserved*:                LONGINT;                                (*  --  *)
  1933.         hReserved*:                LONGINT;                                (*  --  *)
  1934.         iReserved*:                LONGINT;                                (*  --  *)
  1935.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  1936.         getBufferSize*:            LONGINT;                                (*  --> *)
  1937.     END;
  1938.  
  1939. (*
  1940. DirAbort:
  1941. With this call a user will able to abort an outstanding catalog service call.
  1942. A user must pass a pointer to the parameter block for the outstanding call.
  1943. In the current version of the product, the toolbox will process this call
  1944. for NetSearchADAPDirectoriesGet or FindADAPDirectoryByNetSearch calls and if possible
  1945. it will abort. For other calls for ADAP and PAB this will return 'daAbortFailErr'.
  1946. For CSAM catalogs, this call will be passed to the corresponding CSAM driver.
  1947. The CSAM driver may process this call or may return 'daAbortFailErr'. This call can
  1948. be called only in synchronous mode. Since the abort call makes references to fields in
  1949. the pb associated with the original call, this pb must not be disposed or or altered if
  1950. the original call completes before the abort call has completed.
  1951. *)
  1952.     DirAbortPB* = RECORD
  1953.         qLink*:                    Types.Ptr;
  1954.         reserved1*:                LONGINT;
  1955.         reserved2*:                LONGINT;
  1956.         ioCompletion*:            DirIOCompletionUPP;
  1957.         ioResult*:                Types.OSErr;
  1958.         saveA5*:                    LONGINT;
  1959.         reqCode*:                INTEGER;
  1960.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1961.         serverHint*:                AppleTalk.AddrBlock;
  1962.         dsRefNum*:                INTEGER;
  1963.         callID*:                    LONGINT;
  1964.         identity*:                AuthIdentity;
  1965.         gReserved1*:                LONGINT;
  1966.         gReserved2*:                LONGINT;
  1967.         gReserved3*:                LONGINT;
  1968.         clientData*:                LONGINT;
  1969.         pb*:                        POINTER TO DirParamBlock;                            (*  --> pb for the call which must be aborted *)
  1970.     END;
  1971.  
  1972. (*
  1973. AddPseudonym:
  1974. An alternate name and type can be added to a given record. If allowDuplicate
  1975. is set the name and type will be added even if the same name and type already
  1976. exists.
  1977. *)
  1978.     DirAddPseudonymPB* = RECORD
  1979.         qLink*:                    Types.Ptr;
  1980.         reserved1*:                LONGINT;
  1981.         reserved2*:                LONGINT;
  1982.         ioCompletion*:            DirIOCompletionUPP;
  1983.         ioResult*:                Types.OSErr;
  1984.         saveA5*:                    LONGINT;
  1985.         reqCode*:                INTEGER;
  1986.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  1987.         serverHint*:                AppleTalk.AddrBlock;
  1988.         dsRefNum*:                INTEGER;
  1989.         callID*:                    LONGINT;
  1990.         identity*:                AuthIdentity;
  1991.         gReserved1*:                LONGINT;
  1992.         gReserved2*:                LONGINT;
  1993.         gReserved3*:                LONGINT;
  1994.         clientData*:                LONGINT;
  1995.         aRecord*:                OCE.RecordIDPtr;                            (*  --> RecordID to which pseudonym is to be added *)
  1996.         pseudonymName*:            OCE.RStringPtr;                                (*  --> new name to be added as pseudonym *)
  1997.         pseudonymType*:            OCE.RStringPtr;                                (*  --> new name to be added as pseudonym *)
  1998.         allowDuplicate*:            BOOLEAN;                                (*  --> *)
  1999.         filler1*:                BOOLEAN;
  2000.     END;
  2001.  
  2002. (*
  2003. DeletePseudonym:
  2004. An alternate name and type for a given record can be deleted.
  2005. *)
  2006.     DirDeletePseudonymPB* = RECORD
  2007.         qLink*:                    Types.Ptr;
  2008.         reserved1*:                LONGINT;
  2009.         reserved2*:                LONGINT;
  2010.         ioCompletion*:            DirIOCompletionUPP;
  2011.         ioResult*:                Types.OSErr;
  2012.         saveA5*:                    LONGINT;
  2013.         reqCode*:                INTEGER;
  2014.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2015.         serverHint*:                AppleTalk.AddrBlock;
  2016.         dsRefNum*:                INTEGER;
  2017.         callID*:                    LONGINT;
  2018.         identity*:                AuthIdentity;
  2019.         gReserved1*:                LONGINT;
  2020.         gReserved2*:                LONGINT;
  2021.         gReserved3*:                LONGINT;
  2022.         clientData*:                LONGINT;
  2023.         aRecord*:                OCE.RecordIDPtr;                            (*  --> RecordID to which pseudonym to be added *)
  2024.         pseudonymName*:            OCE.RStringPtr;                                (*  --> pseudonymName to be deleted *)
  2025.         pseudonymType*:            OCE.RStringPtr;                                (*  --> pseudonymType to be deleted *)
  2026.     END;
  2027.  
  2028. (*
  2029.     AddAlias*:
  2030.     This call can be used to create an alias  record. The alias
  2031.     can be created either in the same or different cluster. ADAS will not support
  2032.     this call for this release. A new catalog capability flag 'kSupportsAlias' will indicate
  2033.     if the catalog supports this call. PAB's will support this call. For the PAB implementation,
  2034.     this call will create a record with the name and type specified an aRecord.
  2035.     This call works exactly like AddRecord.
  2036.     If 'allowDuplicate' is false and another record with same name and type already exists
  2037.     'daNoDupAllowed' error will be returned.
  2038. *)
  2039.     DirAddAliasPB* = RECORD
  2040.         qLink*:                    Types.Ptr;
  2041.         reserved1*:                LONGINT;
  2042.         reserved2*:                LONGINT;
  2043.         ioCompletion*:            DirIOCompletionUPP;
  2044.         ioResult*:                Types.OSErr;
  2045.         saveA5*:                    LONGINT;
  2046.         reqCode*:                INTEGER;
  2047.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2048.         serverHint*:                AppleTalk.AddrBlock;
  2049.         dsRefNum*:                INTEGER;
  2050.         callID*:                    LONGINT;
  2051.         identity*:                AuthIdentity;
  2052.         gReserved1*:                LONGINT;
  2053.         gReserved2*:                LONGINT;
  2054.         gReserved3*:                LONGINT;
  2055.         clientData*:                LONGINT;
  2056.         aRecord*:                OCE.RecordIDPtr;                            (*  -> *)
  2057.         allowDuplicate*:            BOOLEAN;                                (*  -> *)
  2058.         filler1*:                BOOLEAN;
  2059.     END;
  2060.  
  2061. (*
  2062. DirFindValue:
  2063. This call can be used to find the occurrence of a value. The value
  2064. to be matched is passed in the buffer 'matchingData' field. The current
  2065. ADAP/PAB implementation will match a maximum of 32 bytes of data.
  2066. For attribute values in the PAB/ADAP implementation, only the first 32 bytes will
  2067. be used for comparing the occurrence of data. Search can be restricted to
  2068. a particular record and/or attribute type by specifying 'aRecordLONG(" or ")aType'.
  2069. After finding one occurrence, 'startingRecord' and 'startingAttribute'
  2070. can be specified to find the next occurrence of the same value.
  2071. 'sortDirection' can be specified with starting values to search forward or backward.
  2072. When a matching value is found, the 'recordFound' indicates the reccordID in which the
  2073. data occurrence was found, 'attributeFound' indicates the attribute with in which the
  2074. matching data was found. ADAP/PAB implementation returns only the type and creationID of
  2075. attributes. Catalogs which don't support creationIDs may return the
  2076. complete value; hence this call may need a buffer to hold the data. For ADAP/PAB implementations
  2077. the user has to make a DirLookup call to get the actual data. 'recordFound' and
  2078. 'attributeFound' can be used to initialize 'startingRecord' and 'startingAttribute' to
  2079. find the next occurrence of the value.
  2080. *)
  2081.     DirFindValuePB* = RECORD
  2082.         qLink*:                    Types.Ptr;
  2083.         reserved1*:                LONGINT;
  2084.         reserved2*:                LONGINT;
  2085.         ioCompletion*:            DirIOCompletionUPP;
  2086.         ioResult*:                Types.OSErr;
  2087.         saveA5*:                    LONGINT;
  2088.         reqCode*:                INTEGER;
  2089.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2090.         serverHint*:                AppleTalk.AddrBlock;
  2091.         dsRefNum*:                INTEGER;
  2092.         callID*:                    LONGINT;
  2093.         identity*:                AuthIdentity;
  2094.         gReserved1*:                LONGINT;
  2095.         gReserved2*:                LONGINT;
  2096.         gReserved3*:                LONGINT;
  2097.         clientData*:                LONGINT;
  2098.         aRLI*:                    OCE.PackedRLIPtr;                            (*  --> an RLI specifying the cluster to be enumerated *)
  2099.         aRecord*:                OCE.LocalRecordIDPtr;                        (*  --> if not nil, look only in this record *)
  2100.         attrType*:                OCE.AttributeTypePtr;                        (*  --> if not nil, look only in this attribute type *)
  2101.         startingRecord*:            OCE.LocalRecordIDPtr;                        (*  --> record in which to start searching *)
  2102.         startingAttribute*:        OCE.AttributePtr;                            (*  --> attribute in which to start searching *)
  2103.         recordFound*:            OCE.LocalRecordIDPtr;                        (* <--  record in which data was found *)
  2104.         attributeFound*:            OCE.Attribute;                                (* <--  attribute in which data was found *)
  2105.         matchSize*:                LONGINT;                                (*  --> length of matching bytes *)
  2106.         matchingData*:            Types.Ptr;                                    (*  --> data bytes to be matched in search *)
  2107.         sortDirection*:            DirSortDirection;                        (*  --> sort direction (forwards or backwards) *)
  2108.     END;
  2109.  
  2110. (*
  2111. EnumeratePseudonymGet:
  2112. This call can be used to enumerate the existing pseudonyms for
  2113. a given record specified in 'aRecord'. A starting point can be specified
  2114. by 'startingName' and 'startingType'. If the 'includeStartingPoint' boolean
  2115. is true and a starting point is specified, the name specified by startingName
  2116. and startingType also is returned in the results, if it exists. If this is set to false,
  2117. the pseudonym in startingName and Type is not included.
  2118. Pseudonyms returned in the 'getBuffer' can be extracted by making an
  2119. EnumeratePseudonymParse call. The results will consist of a RecordID with the
  2120. name and type of the pseudonym. If the buffer could not hold all the results, then
  2121. 'kOCEMoreData' error will be returned. The user will be able to continue the call by
  2122. using the last result returned as starting point for the next call.
  2123. *)
  2124.     DirEnumeratePseudonymGetPB* = RECORD
  2125.         qLink*:                    Types.Ptr;
  2126.         reserved1*:                LONGINT;
  2127.         reserved2*:                LONGINT;
  2128.         ioCompletion*:            DirIOCompletionUPP;
  2129.         ioResult*:                Types.OSErr;
  2130.         saveA5*:                    LONGINT;
  2131.         reqCode*:                INTEGER;
  2132.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2133.         serverHint*:                AppleTalk.AddrBlock;
  2134.         dsRefNum*:                INTEGER;
  2135.         callID*:                    LONGINT;
  2136.         identity*:                AuthIdentity;
  2137.         gReserved1*:                LONGINT;
  2138.         gReserved2*:                LONGINT;
  2139.         gReserved3*:                LONGINT;
  2140.         clientData*:                LONGINT;
  2141.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  2142.         startingName*:            OCE.RStringPtr;                                (*  --> *)
  2143.         startingType*:            OCE.RStringPtr;                                (*  --> *)
  2144.         dReserved*:                LONGINT;                                (*  --  *)
  2145.         eReserved*:                LONGINT;                                (*  --  *)
  2146.         fReserved*:                LONGINT;                                (*  --  *)
  2147.         gReserved*:                LONGINT;                                (*  --  *)
  2148.         hReserved*:                LONGINT;                                (*  --  *)
  2149.         includeStartingPoint*:    BOOLEAN;                                (*  --> if true return the Pseudonym specified by starting point will be included *)
  2150.         padByte*:                Types.SInt8; (* Types.Byte *)
  2151.         i1Reserved*:                INTEGER;                                (*  --  *)
  2152.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2153.         getBufferSize*:            LONGINT;                                (*  --> *)
  2154.     END;
  2155.  
  2156. (* The call-back function is defined as follows*: *)
  2157.     ForEachRecordIDProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR recordID: OCE.RecordID): BOOLEAN;
  2158.     ForEachRecordIDUPP* = Types.UniversalProcPtr;
  2159.  
  2160.     ForEachRecordID* = ForEachRecordIDUPP;
  2161.  
  2162. (*
  2163. EnumeratePseudonymParse:
  2164. The pseudonyms returned in the 'getBuffer' from the EnumeratePseudonymGet call
  2165. can be extracted by using the EnumeratePseudonymParse call. 'eachRecordID'
  2166. will be called for each pseudonym.
  2167.  
  2168. Returning true from any call-back will terminate the EnumeratePseudonymParse call.
  2169.  
  2170. For synchronous calls, the call-back routine actually runs as part of the same thread
  2171. of execution as the thread that made the EnumeratePseudonymParse call.  That means that the
  2172. same low-memory globals, A5, stack, etc. are in effect during the call-back
  2173. that were in effect when the call was made.  Because of this, the call-back
  2174. routine has the same restrictions as the caller of EnumeratePseudonymParse*:
  2175. if EnumeratePseudonymParse was not called from interrupt level, then the call-
  2176. back routine can allocate memory. For asynchronous calls, call-back routine is
  2177. like a ioCompletion except that A5 will be preserved for the application.
  2178. *)
  2179.     DirEnumeratePseudonymParsePB* = RECORD
  2180.         qLink*:                    Types.Ptr;
  2181.         reserved1*:                LONGINT;
  2182.         reserved2*:                LONGINT;
  2183.         ioCompletion*:            DirIOCompletionUPP;
  2184.         ioResult*:                Types.OSErr;
  2185.         saveA5*:                    LONGINT;
  2186.         reqCode*:                INTEGER;
  2187.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2188.         serverHint*:                AppleTalk.AddrBlock;
  2189.         dsRefNum*:                INTEGER;
  2190.         callID*:                    LONGINT;
  2191.         identity*:                AuthIdentity;
  2192.         gReserved1*:                LONGINT;
  2193.         gReserved2*:                LONGINT;
  2194.         gReserved3*:                LONGINT;
  2195.         clientData*:                LONGINT;
  2196.         aRecord*:                OCE.RecordIDPtr;                            (*  --> same as DirEnumerateAliasesGetPB *)
  2197.         bReserved*:                LONGINT;                                (*  --  *)
  2198.         cReserved*:                LONGINT;                                (*  --  *)
  2199.         eachRecordID*:            ForEachRecordID;                        (*  --> *)
  2200.         eReserved*:                LONGINT;                                (*  --  *)
  2201.         fReserved*:                LONGINT;                                (*  --  *)
  2202.         gReserved*:                LONGINT;                                (*  --  *)
  2203.         hReserved*:                LONGINT;                                (*  --  *)
  2204.         iReserved*:                LONGINT;                                (*  --  *)
  2205.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2206.         getBufferSize*:            LONGINT;                                (*  --> *)
  2207.     END;
  2208.  
  2209. (* GetNameAndType *)
  2210.     DirGetNameAndTypePB* = RECORD
  2211.         qLink*:                    Types.Ptr;
  2212.         reserved1*:                LONGINT;
  2213.         reserved2*:                LONGINT;
  2214.         ioCompletion*:            DirIOCompletionUPP;
  2215.         ioResult*:                Types.OSErr;
  2216.         saveA5*:                    LONGINT;
  2217.         reqCode*:                INTEGER;
  2218.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2219.         serverHint*:                AppleTalk.AddrBlock;
  2220.         dsRefNum*:                INTEGER;
  2221.         callID*:                    LONGINT;
  2222.         identity*:                AuthIdentity;
  2223.         gReserved1*:                LONGINT;
  2224.         gReserved2*:                LONGINT;
  2225.         gReserved3*:                LONGINT;
  2226.         clientData*:                LONGINT;
  2227.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  2228.     END;
  2229.  
  2230. (*
  2231. aRecord must contain valid RLI and a OCE.CreationID.  It
  2232. must also contain pointers to maximum-length RStrings (name and type fields)
  2233. in which will be returned the record's distinguished name and type.
  2234. *)
  2235. (*
  2236. SetNameAndType:
  2237. This call can be used to change a name and type for a record. The record
  2238. to be renamed is specified using 'aRecord'.
  2239. 'newName' and 'newType' indicate the name and type to be set.
  2240. 'allowDuplicate' if true indicates that name is to be set even if another
  2241. name and type exactly matches the newName and newType specified.
  2242.  
  2243. 'newName' and 'newType' are required since the catalogs not supporting
  2244. OCE.CreationID require name and type fields in the recordID to identify a given
  2245. record.
  2246. *)
  2247.     DirSetNameAndTypePB* = RECORD
  2248.         qLink*:                    Types.Ptr;
  2249.         reserved1*:                LONGINT;
  2250.         reserved2*:                LONGINT;
  2251.         ioCompletion*:            DirIOCompletionUPP;
  2252.         ioResult*:                Types.OSErr;
  2253.         saveA5*:                    LONGINT;
  2254.         reqCode*:                INTEGER;
  2255.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2256.         serverHint*:                AppleTalk.AddrBlock;
  2257.         dsRefNum*:                INTEGER;
  2258.         callID*:                    LONGINT;
  2259.         identity*:                AuthIdentity;
  2260.         gReserved1*:                LONGINT;
  2261.         gReserved2*:                LONGINT;
  2262.         gReserved3*:                LONGINT;
  2263.         clientData*:                LONGINT;
  2264.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  2265.         allowDuplicate*:            BOOLEAN;                                (*  --> *)
  2266.         padByte*:                Types.SInt8; (* Types.Byte *)
  2267.         newName*:                OCE.RStringPtr;                                (*  --> new name for the record *)
  2268.         newType*:                OCE.RStringPtr;                                (*  --> new type for the record *)
  2269.     END;
  2270.  
  2271. (*
  2272. DirGetMetaRecordInfo: This call can be made to obtain
  2273. the MetaRecordInfo for a given record. Information returned
  2274. is 16 bytes of OPAQUE information about the record.
  2275. *)
  2276.     DirGetRecordMetaInfoPB* = RECORD
  2277.         qLink*:                    Types.Ptr;
  2278.         reserved1*:                LONGINT;
  2279.         reserved2*:                LONGINT;
  2280.         ioCompletion*:            DirIOCompletionUPP;
  2281.         ioResult*:                Types.OSErr;
  2282.         saveA5*:                    LONGINT;
  2283.         reqCode*:                INTEGER;
  2284.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2285.         serverHint*:                AppleTalk.AddrBlock;
  2286.         dsRefNum*:                INTEGER;
  2287.         callID*:                    LONGINT;
  2288.         identity*:                AuthIdentity;
  2289.         gReserved1*:                LONGINT;
  2290.         gReserved2*:                LONGINT;
  2291.         gReserved3*:                LONGINT;
  2292.         clientData*:                LONGINT;
  2293.         aRecord*:                OCE.RecordIDPtr;                            (*  --> *)
  2294.         metaInfo*:                DirMetaInfo;                            (* <--  *)
  2295.     END;
  2296.  
  2297. (*
  2298. DirGetDNodeMetaInfo: This call can be made to obtain
  2299. the DNodeMetaInfo for a given Packed RLI. Information returned
  2300. is 16 bytes of OPAQUE information about the DNode.
  2301. *)
  2302.     DirGetDNodeMetaInfoPB* = RECORD
  2303.         qLink*:                    Types.Ptr;
  2304.         reserved1*:                LONGINT;
  2305.         reserved2*:                LONGINT;
  2306.         ioCompletion*:            DirIOCompletionUPP;
  2307.         ioResult*:                Types.OSErr;
  2308.         saveA5*:                    LONGINT;
  2309.         reqCode*:                INTEGER;
  2310.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2311.         serverHint*:                AppleTalk.AddrBlock;
  2312.         dsRefNum*:                INTEGER;
  2313.         callID*:                    LONGINT;
  2314.         identity*:                AuthIdentity;
  2315.         gReserved1*:                LONGINT;
  2316.         gReserved2*:                LONGINT;
  2317.         gReserved3*:                LONGINT;
  2318.         clientData*:                LONGINT;
  2319.         pRLI*:                    OCE.PackedRLIPtr;                            (*  --> *)
  2320.         metaInfo*:                DirMetaInfo;                            (* <--  *)
  2321.     END;
  2322.  
  2323. (*
  2324. EnumerateDirectoriesGet:
  2325. A user can enumerate all the catalogs installed. This includes installed
  2326. ADAP and CSAM catalogs. The user can specify a signature as input to restrict
  2327. the results. kDirADAPKind will return only ADAP catalogs, kDirDSAMKind
  2328. will return all CSAM catalogs. kDirAllKinds will get both ADAP & CSAM catalogs.
  2329. A specific signature (e.g. X.500) may be used to get catalogs with an X.500 signature.
  2330. The information for each catalog returned will have directoryName, discriminator and features.
  2331.  
  2332. If the user receives 'noErrLONG(" or ")kOCEMoreData', the buffer will contain valid results. A user
  2333. can extract the results in the 'getBuffer' by making an DirEnumerateDirectories call.
  2334.  
  2335. If 'kOCEMoreData' is received, the user can continue enumeration by using the last catalog and
  2336. discriminator as startingDirectoryName and staringDirDiscriminator in the next call.
  2337.  
  2338. If 'includeStartingPoint' is true and a starting point is specified,
  2339. the staring point will be returned in the result. If false, it is not included.
  2340. *)
  2341.     DirEnumerateDirectoriesGetPB* = RECORD
  2342.         qLink*:                    Types.Ptr;
  2343.         reserved1*:                LONGINT;
  2344.         reserved2*:                LONGINT;
  2345.         ioCompletion*:            DirIOCompletionUPP;
  2346.         ioResult*:                Types.OSErr;
  2347.         saveA5*:                    LONGINT;
  2348.         reqCode*:                INTEGER;
  2349.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2350.         serverHint*:                AppleTalk.AddrBlock;
  2351.         dsRefNum*:                INTEGER;
  2352.         callID*:                    LONGINT;
  2353.         identity*:                AuthIdentity;
  2354.         gReserved1*:                LONGINT;
  2355.         gReserved2*:                LONGINT;
  2356.         gReserved3*:                LONGINT;
  2357.         clientData*:                LONGINT;
  2358.         directoryKind*:            OCE.OCEDirectoryKind;                        (*  --> enumerate catalogs bearing this signature *)
  2359.         startingDirectoryName*:    OCE.DirectoryNamePtr;                        (*  --> staring catalog name *)
  2360.         startingDirDiscriminator*: OCE.DirDiscriminator;                        (*  --> staring catalog discriminator *)
  2361.         eReserved*:                LONGINT;                                (*  --  *)
  2362.         fReserved*:                LONGINT;                                (*  --  *)
  2363.         gReserved*:                LONGINT;                                (*  --  *)
  2364.         hReserved*:                LONGINT;                                (*  --  *)
  2365.         includeStartingPoint*:    BOOLEAN;                                (*  --> if true return the catalog specified by starting point *)
  2366.         padByte*:                Types.SInt8; (* Types.Byte *)
  2367.         i1Reserved*:                INTEGER;                                (*  --  *)
  2368.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2369.         getBufferSize*:            LONGINT;                                (*  --> *)
  2370.     END;
  2371.  
  2372.     ForEachDirectoryProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR dirName: OCE.DirectoryName; (*CONST*)VAR discriminator: OCE.DirDiscriminator; features: DirGestalt): BOOLEAN;
  2373.     ForEachDirectoryUPP* = Types.UniversalProcPtr;
  2374.  
  2375.     ForEachDirectory* = ForEachDirectoryUPP;
  2376.  
  2377. (*
  2378. EnumerateDirectoriesParse:
  2379. The catalog info returned in 'getBuffer' from the EnumerateDirectoriesGet call
  2380. can be extracted using the EnumerateDirectoriesParse call. 'eachDirectory' will
  2381. be called for each catalog.
  2382.  
  2383. Returning true from any call-back will terminate the EnumerateDirectoriesParse call.
  2384.  
  2385. For synchronous calls, the call-back routine actually runs as part of the same thread
  2386. of execution as the thread that made the EnumerateDirectoriesParse call.  That means that the
  2387. same low-memory globals, A5, stack, etc. are in effect during the call-back
  2388. that were in effect when the call was made.  Because of this, the call-back
  2389. routine has the same restrictions as the caller of EnumerateDirectoriesParse*:
  2390. if EnumerateDirectoriesParse was not called from interrupt level, then the call-
  2391. back routine can allocate memory. For asynchronous calls, call-back routine is
  2392. like a ioCompletion except that A5 will be preserved for the application.
  2393.  
  2394. eachDirectory will be called each time to return to the client a
  2395. DirectoryName, OCE.DirDiscriminator, and features for that catalog.
  2396. *)
  2397.     DirEnumerateDirectoriesParsePB* = RECORD
  2398.         qLink*:                    Types.Ptr;
  2399.         reserved1*:                LONGINT;
  2400.         reserved2*:                LONGINT;
  2401.         ioCompletion*:            DirIOCompletionUPP;
  2402.         ioResult*:                Types.OSErr;
  2403.         saveA5*:                    LONGINT;
  2404.         reqCode*:                INTEGER;
  2405.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2406.         serverHint*:                AppleTalk.AddrBlock;
  2407.         dsRefNum*:                INTEGER;
  2408.         callID*:                    LONGINT;
  2409.         identity*:                AuthIdentity;
  2410.         gReserved1*:                LONGINT;
  2411.         gReserved2*:                LONGINT;
  2412.         gReserved3*:                LONGINT;
  2413.         clientData*:                LONGINT;
  2414.         aReserved*:                LONGINT;                                (*  --  *)
  2415.         bReserved*:                LONGINT;                                (*  --  *)
  2416.         cReserved*:                LONGINT;                                (*  --  *)
  2417.         dReserved*:                LONGINT;                                (*  --  *)
  2418.         eachDirectory*:            ForEachDirectory;                        (*  --> *)
  2419.         fReserved*:                LONGINT;                                (*  --  *)
  2420.         gReserved*:                LONGINT;                                (*  --  *)
  2421.         hReserved*:                LONGINT;                                (*  --  *)
  2422.         iReserved*:                LONGINT;                                (*  --  *)
  2423.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2424.         getBufferSize*:            LONGINT;                                (*  --> *)
  2425.     END;
  2426.  
  2427. (*
  2428. The Following five call are specific to ADAP Catalogs. Toolbox
  2429. remembers a list of catalogs across boots. If any catalog service
  2430. call is intended for a ADAP catalog, then it must be in the list.
  2431. In order for managing this list, A client (Probably DE will use these
  2432. calls.
  2433. DirAddADAPDirectoryPB: Add a new ADAP catalog to the list.
  2434. DirRemoveADAPDirectory: Remove a ADAP catalog from the list.
  2435. DirNetSearchADAPDirectoriesGet:   search an internet for adas catalogs.
  2436. DirNetSearchADAPDirectoriesParse: extract the results obtained NetSearchADAPDirectoriesGet.
  2437. DirFindADAPDirectoryByNetSearch: Find a specified catalog through net search.
  2438. *)
  2439. (*
  2440. NetSearchADAPDirectoriesGet:
  2441. This call can be used to make a network wide search for finding ADAP catalogs.
  2442. This call will be supported only by LONG("ADAP") and involve highly expensive
  2443. network operations, so the user is advised to use utmost discretion before
  2444. making this call. The results will be collected in the 'getbuffer' and can be
  2445. extracted using NetSearchADAPDirectoriesParse call. The directoryName,
  2446. the directoryDiscriminator, features and serverHint (AppleTalk address for
  2447. a PathFinder serving that catalog) are collected for each catalog found
  2448. on the network. If buffer is too small to hold all the catalogs found on
  2449. the network, a 'kOCEMoreData' error will be returned.
  2450. *)
  2451.     DirNetSearchADAPDirectoriesGetPB* = RECORD
  2452.         qLink*:                    Types.Ptr;
  2453.         reserved1*:                LONGINT;
  2454.         reserved2*:                LONGINT;
  2455.         ioCompletion*:            DirIOCompletionUPP;
  2456.         ioResult*:                Types.OSErr;
  2457.         saveA5*:                    LONGINT;
  2458.         reqCode*:                INTEGER;
  2459.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2460.         serverHint*:                AppleTalk.AddrBlock;
  2461.         dsRefNum*:                INTEGER;
  2462.         callID*:                    LONGINT;
  2463.         identity*:                AuthIdentity;
  2464.         gReserved1*:                LONGINT;
  2465.         gReserved2*:                LONGINT;
  2466.         gReserved3*:                LONGINT;
  2467.         clientData*:                LONGINT;
  2468.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2469.         getBufferSize*:            LONGINT;                                (*  --> *)
  2470.         cReserved*:                LONGINT;                                (*  --  *)
  2471.     END;
  2472.  
  2473.     ForEachADAPDirectoryProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR dirName: OCE.DirectoryName; (*CONST*)VAR discriminator: OCE.DirDiscriminator; features: DirGestalt; serverHint: AppleTalk.AddrBlock): BOOLEAN;
  2474.     ForEachADAPDirectoryUPP* = Types.UniversalProcPtr;
  2475.  
  2476.     ForEachADAPDirectory* = ForEachADAPDirectoryUPP;
  2477.  
  2478. (*
  2479. DirNetSearchADAPDirectoriesParse:
  2480. This call can be used to extract the results obtained in the 'getBuffer'.
  2481. The directoryName, directoryDiscriminator, features and
  2482. serverHint (AppleTalk address for a PathFinder serving that catalog) are
  2483. returned in each call-back. These values may be used to make an
  2484. AddADAPDirectory call.
  2485.  
  2486. Returning TRUE from any call-back will terminate the NetSearchADAPDirectoriesParse request.
  2487.  
  2488. For synchronous calls, the call-back routine actually runs as part of the same thread
  2489. of execution as the thread that made the DirNetSearchADAPDirectoriesParse call. That means that the
  2490. same low-memory globals, A5, stack, etc. are in effect during the call-back
  2491. that were in effect when the call was made.  Because of this, the call-back
  2492. routine has the same restrictions as the caller of DirNetSearchADAPDirectoriesParse*:
  2493. if DirNetSearchADAPDirectoriesParse was not called from interrupt level, then the call-
  2494. back routine can allocate memory. For asynchronous calls, call-back routine is
  2495. like a ioCompletion except that A5 will be preserved for the application.
  2496. *)
  2497.     DirNetSearchADAPDirectoriesParsePB* = RECORD
  2498.         qLink*:                    Types.Ptr;
  2499.         reserved1*:                LONGINT;
  2500.         reserved2*:                LONGINT;
  2501.         ioCompletion*:            DirIOCompletionUPP;
  2502.         ioResult*:                Types.OSErr;
  2503.         saveA5*:                    LONGINT;
  2504.         reqCode*:                INTEGER;
  2505.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2506.         serverHint*:                AppleTalk.AddrBlock;
  2507.         dsRefNum*:                INTEGER;
  2508.         callID*:                    LONGINT;
  2509.         identity*:                AuthIdentity;
  2510.         gReserved1*:                LONGINT;
  2511.         gReserved2*:                LONGINT;
  2512.         gReserved3*:                LONGINT;
  2513.         clientData*:                LONGINT;
  2514.         getBuffer*:                Types.Ptr;                                    (*  --> *)
  2515.         getBufferSize*:            LONGINT;                                (*  --> *)
  2516.         eachADAPDirectory*:        ForEachADAPDirectory;                    (*  --> *)
  2517.     END;
  2518.  
  2519. (*
  2520. DirFindADAPDirectoryByNetSearch:
  2521. This call can be used to make a network wide search to find an ADAP catalog.
  2522. This call will be supported only by LONG("ADAP") and involves highly expensive
  2523. network operations, so the user is advised to use utmost discretion before
  2524. making this call. The catalog is specified using directoryName and discriminator.
  2525. If 'addToOCESetup' is true, the catalog will be automatically added to the setup
  2526. list and will be visible through the EnumerateDirectories call and also
  2527. also a creationID to the directoryRecord will be returned.
  2528. If this parameter is set to 'false', the catalog will be added to temporary list
  2529. and will be available for making other catalog service calls. The catalogs
  2530. which are not in the preference catalog list will not be visible through the
  2531. EnumerateDirectories call.
  2532. *)
  2533.     DirFindADAPDirectoryByNetSearchPB* = RECORD
  2534.         qLink*:                    Types.Ptr;
  2535.         reserved1*:                LONGINT;
  2536.         reserved2*:                LONGINT;
  2537.         ioCompletion*:            DirIOCompletionUPP;
  2538.         ioResult*:                Types.OSErr;
  2539.         saveA5*:                    LONGINT;
  2540.         reqCode*:                INTEGER;
  2541.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2542.         serverHint*:                AppleTalk.AddrBlock;
  2543.         dsRefNum*:                INTEGER;
  2544.         callID*:                    LONGINT;
  2545.         identity*:                AuthIdentity;
  2546.         gReserved1*:                LONGINT;
  2547.         gReserved2*:                LONGINT;
  2548.         gReserved3*:                LONGINT;
  2549.         clientData*:                LONGINT;
  2550.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  2551.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminate between dup catalog names *)
  2552.         addToOCESetup*:            BOOLEAN;                                (*  --> add this catalog to OCE Setup List *)
  2553.         padByte*:                Types.SInt8; (* Types.Byte *)
  2554.         directoryRecordCID*:        OCE.CreationID;                                (* <--  creationID for the catalog record *)
  2555.     END;
  2556.  
  2557. (*
  2558. DirAddADAPDirectory:
  2559. The catalog specified by 'directoryName' and 'discriminator' will be
  2560. added to the list of catalogs maintained by the Toolbox. Once added,
  2561. the catalog is available across boots, until the catalog is removed
  2562. explicitly through a DirRemoveADAPDirectory call.
  2563. If 'serverHint' is not nil, the address provided will be used
  2564. to contact a PathFinder for the catalog specified.
  2565. If 'serverHint' is nil or does not point to a valid PathFinder server
  2566. for that catalog, this call will fail.
  2567. If 'addToOCESetup' is true, the catalog will be automatically added to the setup
  2568. catalog list and will be visible through EnumerateDirectories calls and
  2569. also a creationID to the directoryRecord will be returned.
  2570. If this parameter is set to 'false', catalog will be added to temprary list
  2571. and will be available for making other catalog service calls. The catalogs
  2572. which are not in the setup  list will not be visible through
  2573. EnumerateDirectories call.
  2574. *)
  2575.     DirAddADAPDirectoryPB* = RECORD
  2576.         qLink*:                    Types.Ptr;
  2577.         reserved1*:                LONGINT;
  2578.         reserved2*:                LONGINT;
  2579.         ioCompletion*:            DirIOCompletionUPP;
  2580.         ioResult*:                Types.OSErr;
  2581.         saveA5*:                    LONGINT;
  2582.         reqCode*:                INTEGER;
  2583.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2584.         serverHint*:                AppleTalk.AddrBlock;
  2585.         dsRefNum*:                INTEGER;
  2586.         callID*:                    LONGINT;
  2587.         identity*:                AuthIdentity;
  2588.         gReserved1*:                LONGINT;
  2589.         gReserved2*:                LONGINT;
  2590.         gReserved3*:                LONGINT;
  2591.         clientData*:                LONGINT;
  2592.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  2593.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminate between dup catalog names *)
  2594.         addToOCESetup*:            BOOLEAN;                                (*  --> add this catalog to OCE Setup *)
  2595.         padByte*:                Types.SInt8; (* Types.Byte *)
  2596.         directoryRecordCID*:        OCE.CreationID;                                (* <--  creationID for the catalog record *)
  2597.     END;
  2598.  
  2599. (*
  2600. GetDirectoryInfo:
  2601. DirGetDirectoryInfo will do*:
  2602.  
  2603. If a 'dsRefNum' is non-Zero, the catalog information for
  2604.     the corresponding  PAB will be  returned.
  2605.  If 'dsRefNum' is zero and 'serverHint' is non-zero, If the
  2606.  'serverHint' points to a valid ADAP Catalog Server(Path Finder),
  2607.  the catalog information (i.e. directoryName, discriminator, features)
  2608.  for that catalog will be returned.
  2609.     If a  valid catalog name and discriminator are provided
  2610.     features (Set of capability flags) for that catalog will be returned.
  2611. *)
  2612.     DirGetDirectoryInfoPB* = RECORD
  2613.         qLink*:                    Types.Ptr;
  2614.         reserved1*:                LONGINT;
  2615.         reserved2*:                LONGINT;
  2616.         ioCompletion*:            DirIOCompletionUPP;
  2617.         ioResult*:                Types.OSErr;
  2618.         saveA5*:                    LONGINT;
  2619.         reqCode*:                INTEGER;
  2620.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2621.         serverHint*:                AppleTalk.AddrBlock;
  2622.         dsRefNum*:                INTEGER;
  2623.         callID*:                    LONGINT;
  2624.         identity*:                AuthIdentity;
  2625.         gReserved1*:                LONGINT;
  2626.         gReserved2*:                LONGINT;
  2627.         gReserved3*:                LONGINT;
  2628.         clientData*:                LONGINT;
  2629.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  2630.         discriminator*:            OCE.DirDiscriminator;                        (* <--> descriminate between dup catalog names *)
  2631.         features*:                DirGestalt;                                (* <--  capability bit flags *)
  2632.     END;
  2633.  
  2634. (*
  2635.  * Note on Access Controls*:
  2636.  * Access control is based on a list model.
  2637.  * You can get access controls list which gives dsObject and accMask for each dsObject.
  2638.  * GetAccessControl can be limited to currently supplied identity by setting forCurrentUserOnly.
  2639.  * There are special DSObjects are defined in ADASTypes.h for each of the category
  2640.  * supported in ADAS Catalogs. (kOwner, kFriends, kAuthenticatedToCluster, 
  2641.  * kAuthenticatedToDirectory, kGuest) and DUGetActlDSSpec call can be used
  2642.  * to obtain appropraiate DSSpec before making set calls to ADAS catalogs.
  2643.  *
  2644.  *)
  2645. (*
  2646.     GetDNodeAccessControlGet*:
  2647.     This call can be done to get back access control list for a DNode.
  2648.     pRLI -> RLI of the DNode whose access control list is sought
  2649.     curUserAccMask -> If this is LONG("true"), Access controls for the user specified by
  2650.                       the identity parameter will be returned other wise entire list
  2651.                       will be returned.
  2652.     startingDsObj  -> If this is not nil, list should be started after this object.
  2653.     startingPointInclusive -> If staringDsObj is specified, include that in the returned
  2654.                               results.
  2655.                               
  2656.     The results will be collected in the 'getBuffer' supplied by the user.
  2657.     If buffer can not hold all the data returned 'daMoreData' error will be returned.
  2658.      
  2659.     If user receives 'noErrLONG(" or ")daMoreData', buffer will contain valid results. A user
  2660.     can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call.
  2661.     
  2662.     Results returned for each DSObject will contain DSSpecPtr and three sets of access mask. 
  2663.  
  2664. *)
  2665.     DirGetDNodeAccessControlGetPB* = RECORD
  2666.         qLink*:                    Types.Ptr;
  2667.         reserved1*:                LONGINT;
  2668.         reserved2*:                LONGINT;
  2669.         ioCompletion*:            DirIOCompletionUPP;
  2670.         ioResult*:                Types.OSErr;
  2671.         saveA5*:                    LONGINT;
  2672.         reqCode*:                INTEGER;
  2673.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2674.         serverHint*:                AppleTalk.AddrBlock;
  2675.         dsRefNum*:                INTEGER;
  2676.         callID*:                    LONGINT;
  2677.         identity*:                AuthIdentity;
  2678.         gReserved1*:                LONGINT;
  2679.         gReserved2*:                LONGINT;
  2680.         gReserved3*:                LONGINT;
  2681.         clientData*:                LONGINT;
  2682.         pRLI*:                    OCE.PackedRLIPtr;                            (*  -> RLI of the cluster whose access control list is sought  *)
  2683.         bReserved*:                LONGINT;                                (*  -- unused *)
  2684.         cReserved*:                LONGINT;                                (*  -- unused *)
  2685.         dReserved*:                LONGINT;                                (*  -- unused *)
  2686.         eResreved*:                LONGINT;                                (* --> *)
  2687.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  2688.         filler1*:                BOOLEAN;
  2689.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  2690.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the DsObject 
  2691.                                                                 specified in starting point *)
  2692.         filler2*:                BOOLEAN;
  2693.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  2694.         getBufferSize*:            LONGINT;                                (*  -> *)
  2695.     END;
  2696.  
  2697. (* The Access Control call-back function is defined as follows*: *)
  2698.     ForEachDNodeAccessControlProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; defaultRecordAccMask: AccessMask; defaultAttributeAccMask: AccessMask): BOOLEAN;
  2699.     ForEachDNodeAccessControlUPP* = Types.UniversalProcPtr;
  2700.  
  2701.     ForEachDNodeAccessControl* = ForEachDNodeAccessControlUPP;
  2702.  
  2703. (*
  2704.     GetDNodeAccessControlParse*:
  2705.     After an GetDNodeAccessControlGet call has completed, 
  2706.     call GetDNodeAccessControlParse to parse through the buffer that
  2707.     that was filled in GetDNodeAccessControlGet.
  2708.     
  2709.     'eachObject' will be called each time to return to the client a
  2710.     DsObject and a set of three accMasks (three long words) for that object.
  2711.     Acceesmasks returned apply to the dsObject in the callback :
  2712.     1. Currently Active Access mask for the specified DNode.
  2713.     2. Default Access mask for any Record in the DNode
  2714.     3. Default Access mask for any OCE.Attribute in the DNode
  2715.     The clientData parameter that you pass in the parameter block will be passed
  2716.     to 'eachObject'.  You are free to put anything in clientData - it is intended
  2717.     to allow you some way to match the call-back to the original call (for
  2718.     example, you make more then one aysynchronous GetDNodeAccessControlGet calls and you want to
  2719.     associate returned results in some way).
  2720.     
  2721.     The client should return FALSE from 'eachObject' to continue
  2722.     processing of the GetDNodeAccessControlParse request.  Returning TRUE will
  2723.     terminate the GetDNodeAccessControlParse request.
  2724.  
  2725.     For synchronous calls, the call-back routine actually runs as part of the same thread 
  2726.     of execution as the thread that made the GetDNodeAccessControlParse call.  That means that the
  2727.     same low-memory globals, A5, stack, etc. are in effect during the call-back
  2728.     that were in effect when the call was made.  Because of this, the call-back
  2729.     routine has the same restrictions as the caller of GetDNodeAccessControlParse*:
  2730.     if GetDNodeAccessControlParse was not called from interrupt level, then the call-
  2731.     back routine can allocate memory. For asynchronous calls, call-back routine is
  2732.     like a ioCompletion except that A5 will be preserved for the application.
  2733.  
  2734.  
  2735. *)
  2736.     DirGetDNodeAccessControlParsePB* = RECORD
  2737.         qLink*:                    Types.Ptr;
  2738.         reserved1*:                LONGINT;
  2739.         reserved2*:                LONGINT;
  2740.         ioCompletion*:            DirIOCompletionUPP;
  2741.         ioResult*:                Types.OSErr;
  2742.         saveA5*:                    LONGINT;
  2743.         reqCode*:                INTEGER;
  2744.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2745.         serverHint*:                AppleTalk.AddrBlock;
  2746.         dsRefNum*:                INTEGER;
  2747.         callID*:                    LONGINT;
  2748.         identity*:                AuthIdentity;
  2749.         gReserved1*:                LONGINT;
  2750.         gReserved2*:                LONGINT;
  2751.         gReserved3*:                LONGINT;
  2752.         clientData*:                LONGINT;
  2753.         pRLI*:                    OCE.PackedRLIPtr;                            (*  -> RLI of the cluster  *)
  2754.         bReserved*:                LONGINT;                                (*  -- unused *)
  2755.         cReserved*:                LONGINT;                                (*  -- unused *)
  2756.         dReserved*:                LONGINT;                                (*  -- unused *)
  2757.         eachObject*:                ForEachDNodeAccessControl;                (* --> *)
  2758.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  2759.         filler1*:                BOOLEAN;
  2760.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  2761.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the record 
  2762.                                                         specified in starting point *)
  2763.         filler2*:                BOOLEAN;
  2764.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  2765.         getBufferSize*:            LONGINT;                                (*  -> *)
  2766.     END;
  2767.  
  2768. (*
  2769.     GetRecordAccessControlGet*:
  2770.     This call can be done to get back access control list for a RecordID.
  2771.     aRecord -> RecordID to which access control list is sought
  2772.     curUserAccMask -> If this is LONG("true"), Access controls for the user specified by
  2773.                       the identity parameter will be returned other wise entire list
  2774.                       will be returned.
  2775.     startingDsObj  -> If this is not nil, list should be started after this object.
  2776.     startingPointInclusive -> If staringDsObj is specified, include that in the returned
  2777.                               results.
  2778.                               
  2779.     The results will be collected in the 'getBuffer' supplied by the user.
  2780.     If buffer can not hold all the data returned 'daMoreData' error will be returned.
  2781.      
  2782.     If user receives 'noErrLONG(" or ")daMoreData', buffer will contain valid results. A user
  2783.     can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call.
  2784.     
  2785.     Results returned for each DSObject will contain DSSpecPtr and accMask. 
  2786.  
  2787. *)
  2788.     DirGetRecordAccessControlGetPB* = RECORD
  2789.         qLink*:                    Types.Ptr;
  2790.         reserved1*:                LONGINT;
  2791.         reserved2*:                LONGINT;
  2792.         ioCompletion*:            DirIOCompletionUPP;
  2793.         ioResult*:                Types.OSErr;
  2794.         saveA5*:                    LONGINT;
  2795.         reqCode*:                INTEGER;
  2796.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2797.         serverHint*:                AppleTalk.AddrBlock;
  2798.         dsRefNum*:                INTEGER;
  2799.         callID*:                    LONGINT;
  2800.         identity*:                AuthIdentity;
  2801.         gReserved1*:                LONGINT;
  2802.         gReserved2*:                LONGINT;
  2803.         gReserved3*:                LONGINT;
  2804.         clientData*:                LONGINT;
  2805.         aRecord*:                OCE.RecordIDPtr;                            (*  -> RecordID to which access control list is sought list is sought  *)
  2806.         bReserved*:                LONGINT;                                (*  -- unused *)
  2807.         cReserved*:                LONGINT;                                (*  -- unused *)
  2808.         dReserved*:                LONGINT;                                (*  -- unused *)
  2809.         eResreved*:                LONGINT;                                (* --> *)
  2810.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  2811.         filler1*:                BOOLEAN;
  2812.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  2813.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the DsObject 
  2814.                                                                 specified in starting point *)
  2815.         filler2*:                BOOLEAN;
  2816.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  2817.         getBufferSize*:            LONGINT;                                (*  -> *)
  2818.     END;
  2819.  
  2820. (* The Access Control call-back function is defined as follows*: *)
  2821.     ForEachRecordAccessControlProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; activeRecordAccMask: AccessMask; defaultAttributeAccMask: AccessMask): BOOLEAN;
  2822.     ForEachRecordAccessControlUPP* = Types.UniversalProcPtr;
  2823.  
  2824.     ForEachRecordAccessControl* = ForEachRecordAccessControlUPP;
  2825.  
  2826. (*
  2827.     GetRecordAccessControlParse*:
  2828.     After an GetRecordAccessControlGet call has completed, 
  2829.     call GetRecordAccessControlParse to parse through the buffer that
  2830.     that was filled in GetRecordAccessControlGet.
  2831.     
  2832.     'eachObject' will be called each time to return to the client a
  2833.     DsObject and a set of three accMasks (three long words) for that object.
  2834.     Acceesmasks returned apply to the dsObject in the callback :
  2835.     1. Active Access mask for the DNode Containing the Record.
  2836.     2. Active Access mask for the Record specified.
  2837.     3. Defualt Access mask for Attributes in the record.
  2838.     The clientData parameter that you pass in the parameter block will be passed
  2839.     to 'eachObject'.  You are free to put anything in clientData - it is intended
  2840.     to allow you some way to match the call-back to the original call (for
  2841.     example, you make more then one aysynchronous GetRecordAccessControlGet calls and you want to
  2842.     associate returned results in some way).
  2843.     
  2844.     The client should return FALSE from 'eachObject' to continue
  2845.     processing of the GetRecordAccessControlParse request.  Returning TRUE will
  2846.     terminate the GetRecordAccessControlParse request.
  2847.  
  2848.     For synchronous calls, the call-back routine actually runs as part of the same thread 
  2849.     of execution as the thread that made the GetRecordAccessControlParse call.  That means that the
  2850.     same low-memory globals, A5, stack, etc. are in effect during the call-back
  2851.     that were in effect when the call was made.  Because of this, the call-back
  2852.     routine has the same restrictions as the caller of GetRecordAccessControlParse*:
  2853.     if GetRecordAccessControlParse was not called from interrupt level, then the call-
  2854.     back routine can allocate memory. For asynchronous calls, call-back routine is
  2855.     like a ioCompletion except that A5 will be preserved for the application.
  2856.  
  2857.  
  2858. *)
  2859.     DirGetRecordAccessControlParsePB* = RECORD
  2860.         qLink*:                    Types.Ptr;
  2861.         reserved1*:                LONGINT;
  2862.         reserved2*:                LONGINT;
  2863.         ioCompletion*:            DirIOCompletionUPP;
  2864.         ioResult*:                Types.OSErr;
  2865.         saveA5*:                    LONGINT;
  2866.         reqCode*:                INTEGER;
  2867.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2868.         serverHint*:                AppleTalk.AddrBlock;
  2869.         dsRefNum*:                INTEGER;
  2870.         callID*:                    LONGINT;
  2871.         identity*:                AuthIdentity;
  2872.         gReserved1*:                LONGINT;
  2873.         gReserved2*:                LONGINT;
  2874.         gReserved3*:                LONGINT;
  2875.         clientData*:                LONGINT;
  2876.         aRecord*:                OCE.RecordIDPtr;                            (*  -> RecordID to which access control list is sought list is sought  *)
  2877.         bReserved*:                LONGINT;                                (*  -- unused *)
  2878.         cReserved*:                LONGINT;                                (*  -- unused *)
  2879.         dReserved*:                LONGINT;                                (*  -- unused *)
  2880.         eachObject*:                ForEachRecordAccessControl;                (* --> *)
  2881.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  2882.         filler1*:                BOOLEAN;
  2883.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  2884.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the record 
  2885.                                                         specified in starting point *)
  2886.         filler2*:                BOOLEAN;
  2887.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  2888.         getBufferSize*:            LONGINT;                                (*  -> *)
  2889.     END;
  2890.  
  2891. (*
  2892.     GetAttributeAccessControlGet*:
  2893.     This call can be done to get back access control list for a attributeType with in a RecordID.
  2894.     aRecord -> RecordID to which access control list is sought
  2895.     aType    -> OCE.Attribute Type to which access controls are sought
  2896.     curUserAccMask -> If this is LONG("true"), Access controls for the user specified by
  2897.                       the identity parameter will be returned other wise entire list
  2898.                       will be returned.
  2899.     startingDsObj  -> If this is not nil, list should be started after this object.
  2900.     startingPointInclusive -> If staringDsObj is specified, include that in the returned
  2901.                               results.
  2902.                               
  2903.     The results will be collected in the 'getBuffer' supplied by the user.
  2904.     If buffer can not hold all the data returned 'daMoreData' error will be returned.
  2905.      
  2906.     If user receives 'noErrLONG(" or ")daMoreData', buffer will contain valid results. A user
  2907.     can extract the results in the 'getBuffer' by making 'DsGetDNodeAccessControlParse' call.
  2908.     
  2909.     Results returned for each DSObject will contain DSSpecPtr and accMask. 
  2910.  
  2911. *)
  2912.     DirGetAttributeAccessControlGetPB* = RECORD
  2913.         qLink*:                    Types.Ptr;
  2914.         reserved1*:                LONGINT;
  2915.         reserved2*:                LONGINT;
  2916.         ioCompletion*:            DirIOCompletionUPP;
  2917.         ioResult*:                Types.OSErr;
  2918.         saveA5*:                    LONGINT;
  2919.         reqCode*:                INTEGER;
  2920.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2921.         serverHint*:                AppleTalk.AddrBlock;
  2922.         dsRefNum*:                INTEGER;
  2923.         callID*:                    LONGINT;
  2924.         identity*:                AuthIdentity;
  2925.         gReserved1*:                LONGINT;
  2926.         gReserved2*:                LONGINT;
  2927.         gReserved3*:                LONGINT;
  2928.         clientData*:                LONGINT;
  2929.         aRecord*:                OCE.RecordIDPtr;                            (*  -> RecordID to which access control list is sought list is sought  *)
  2930.         aType*:                    OCE.AttributeTypePtr;                        (*  -> OCE.Attribute Type to which access controls are sought          *)
  2931.         cReserved*:                LONGINT;                                (*  -- unused *)
  2932.         dReserved*:                LONGINT;                                (*  -- unused *)
  2933.         eResreved*:                LONGINT;                                (* --> *)
  2934.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  2935.         filler1*:                BOOLEAN;
  2936.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  2937.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the DsObject 
  2938.                                                                 specified in starting point *)
  2939.         filler2*:                BOOLEAN;
  2940.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  2941.         getBufferSize*:            LONGINT;                                (*  -> *)
  2942.     END;
  2943.  
  2944. (* The Access Control call-back function is defined as follows*: *)
  2945.     ForEachAttributeAccessControlProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; activeRecordAccMask: AccessMask; activeAttributeAccMask: AccessMask): BOOLEAN;
  2946.     ForEachAttributeAccessControlUPP* = Types.UniversalProcPtr;
  2947.  
  2948.     ForEachAttributeAccessControl* = ForEachAttributeAccessControlUPP;
  2949.  
  2950. (*
  2951.     GetAttributeAccessControlParse*:
  2952.     After an GetAttributeAccessControlGet call has completed, 
  2953.     call GetAttributeAccessControlParse to parse through the buffer that
  2954.     that was filled in GetAttributeAccessControlGet.
  2955.     
  2956.     'eachObject' will be called each time to return to the client a
  2957.     DsObject and a set of three accMasks (three long words) for that object.
  2958.     Acceesmasks returned apply to the dsObject in the callback :
  2959.     1. Active Access mask for the DNode Containing the OCE.Attribute.
  2960.     2. Active Access mask for the Record in the Containing the OCE.Attribute.
  2961.     3. Active Access mask for the specified OCE.Attribute.
  2962.     The clientData parameter that you pass in the parameter block will be passed
  2963.     to 'eachObject'.  You are free to put anything in clientData - it is intended
  2964.     to allow you some way to match the call-back to the original call (for
  2965.     example, you make more then one aysynchronous GetAttributeAccessControlGet calls and you want to
  2966.     associate returned results in some way).
  2967.     
  2968.     The client should return FALSE from 'eachObject' to continue
  2969.     processing of the GetAttributeAccessControlParse request.  Returning TRUE will
  2970.     terminate the GetAttributeAccessControlParse request.
  2971.  
  2972.     For synchronous calls, the call-back routine actually runs as part of the same thread 
  2973.     of execution as the thread that made the GetAttributeAccessControlParse call.  That means that the
  2974.     same low-memory globals, A5, stack, etc. are in effect during the call-back
  2975.     that were in effect when the call was made.  Because of this, the call-back
  2976.     routine has the same restrictions as the caller of GetAttributeAccessControlParse*:
  2977.     if GetAttributeAccessControlParse was not called from interrupt level, then the call-
  2978.     back routine can allocate memory. For asynchronous calls, call-back routine is
  2979.     like a ioCompletion except that A5 will be preserved for the application.
  2980.  
  2981.  
  2982. *)
  2983.     DirGetAttributeAccessControlParsePB* = RECORD
  2984.         qLink*:                    Types.Ptr;
  2985.         reserved1*:                LONGINT;
  2986.         reserved2*:                LONGINT;
  2987.         ioCompletion*:            DirIOCompletionUPP;
  2988.         ioResult*:                Types.OSErr;
  2989.         saveA5*:                    LONGINT;
  2990.         reqCode*:                INTEGER;
  2991.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  2992.         serverHint*:                AppleTalk.AddrBlock;
  2993.         dsRefNum*:                INTEGER;
  2994.         callID*:                    LONGINT;
  2995.         identity*:                AuthIdentity;
  2996.         gReserved1*:                LONGINT;
  2997.         gReserved2*:                LONGINT;
  2998.         gReserved3*:                LONGINT;
  2999.         clientData*:                LONGINT;
  3000.         aRecord*:                OCE.RecordIDPtr;                            (*  -> RecordID to which access control list is sought list is sought  *)
  3001.         aType*:                    OCE.AttributeTypePtr;                        (*  -> OCE.Attribute Type to which access controls are sought          *)
  3002.         cReserved*:                LONGINT;                                (*  -- unused *)
  3003.         dReserved*:                LONGINT;                                (*  -- unused *)
  3004.         eachObject*:                ForEachAttributeAccessControl;            (* --> *)
  3005.         forCurrentUserOnly*:        BOOLEAN;                                (* -->  *)
  3006.         filler1*:                BOOLEAN;
  3007.         startingPoint*:            POINTER TO OCE.DSSpec;                                (* --> starting Types.Point *)
  3008.         includeStartingPoint*:    BOOLEAN;                                (*  -> if true return the record 
  3009.                                                         specified in starting point *)
  3010.         filler2*:                BOOLEAN;
  3011.         getBuffer*:                Types.Ptr;                                    (*    -> *)
  3012.         getBufferSize*:            LONGINT;                                (*  -> *)
  3013.     END;
  3014.  
  3015. (*
  3016. MapPathNameToDNodeNumber:
  3017. This call maps a given PathName within a catalog to its DNodeNumber.
  3018. *)
  3019.     DirMapPathNameToDNodeNumberPB* = RECORD
  3020.         qLink*:                    Types.Ptr;
  3021.         reserved1*:                LONGINT;
  3022.         reserved2*:                LONGINT;
  3023.         ioCompletion*:            DirIOCompletionUPP;
  3024.         ioResult*:                Types.OSErr;
  3025.         saveA5*:                    LONGINT;
  3026.         reqCode*:                INTEGER;
  3027.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3028.         serverHint*:                AppleTalk.AddrBlock;
  3029.         dsRefNum*:                INTEGER;
  3030.         callID*:                    LONGINT;
  3031.         identity*:                AuthIdentity;
  3032.         gReserved1*:                LONGINT;
  3033.         gReserved2*:                LONGINT;
  3034.         gReserved3*:                LONGINT;
  3035.         clientData*:                LONGINT;
  3036.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  3037.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminator *)
  3038.         dNodeNumber*:            OCE.DNodeNum;                                (* <--  dNodenumber to the path *)
  3039.         path*:                    OCE.PackedPathNamePtr;                        (*  --> Path Name to be mapped *)
  3040.     END;
  3041.  
  3042. (*
  3043. PathName in the path field will be mapped to the cooresponding dNodeNumber and
  3044. returned in the DNodeNumber field. directoryName and descriminator Fields are
  3045. ignored. DSRefNum is used to identify the catalog.
  3046. *)
  3047. (*
  3048. MapDNodeNumberToPathName:
  3049. This call will map a given DNodeNumber with in a catalog to the
  3050. corresponding PathName.
  3051. *)
  3052.     DirMapDNodeNumberToPathNamePB* = RECORD
  3053.         qLink*:                    Types.Ptr;
  3054.         reserved1*:                LONGINT;
  3055.         reserved2*:                LONGINT;
  3056.         ioCompletion*:            DirIOCompletionUPP;
  3057.         ioResult*:                Types.OSErr;
  3058.         saveA5*:                    LONGINT;
  3059.         reqCode*:                INTEGER;
  3060.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3061.         serverHint*:                AppleTalk.AddrBlock;
  3062.         dsRefNum*:                INTEGER;
  3063.         callID*:                    LONGINT;
  3064.         identity*:                AuthIdentity;
  3065.         gReserved1*:                LONGINT;
  3066.         gReserved2*:                LONGINT;
  3067.         gReserved3*:                LONGINT;
  3068.         clientData*:                LONGINT;
  3069.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  3070.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminator *)
  3071.         dNodeNumber*:            OCE.DNodeNum;                                (*  --> dNodenumber to be mapped *)
  3072.         path*:                    OCE.PackedPathNamePtr;                        (* <--  Packed Path Name returned *)
  3073.         lengthOfPathName*:        INTEGER;                                (*  --> length of packed pathName structure*)
  3074.     END;
  3075.  
  3076. (*
  3077. dNodeNumber in the DNodeNumber field will be mapped to the cooresponding
  3078. pathName and returned in the PackedPathName field.
  3079. lengthOfPathName is to be set the length of pathName structure.
  3080. If length of PackedPathName is larger then the lengthOfPathName, kOCEMoreData
  3081. Types.OSErr will be returned.
  3082. *)
  3083. (*
  3084. GetLocalNetworkSpec:
  3085. This call will return the Local NetworkSpec. Client should supply
  3086. an RString big enough to hold the NetworkSpec.
  3087. *)
  3088.     DirGetLocalNetworkSpecPB* = RECORD
  3089.         qLink*:                    Types.Ptr;
  3090.         reserved1*:                LONGINT;
  3091.         reserved2*:                LONGINT;
  3092.         ioCompletion*:            DirIOCompletionUPP;
  3093.         ioResult*:                Types.OSErr;
  3094.         saveA5*:                    LONGINT;
  3095.         reqCode*:                INTEGER;
  3096.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3097.         serverHint*:                AppleTalk.AddrBlock;
  3098.         dsRefNum*:                INTEGER;
  3099.         callID*:                    LONGINT;
  3100.         identity*:                AuthIdentity;
  3101.         gReserved1*:                LONGINT;
  3102.         gReserved2*:                LONGINT;
  3103.         gReserved3*:                LONGINT;
  3104.         clientData*:                LONGINT;
  3105.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  3106.         discriminator*:            OCE.DirDiscriminator;                        (*  --> discriminator *)
  3107.         networkSpec*:            OCE.NetworkSpecPtr;                            (* <--  NetworkSpec *)
  3108.     END;
  3109.  
  3110. (*
  3111. PathName in the path field must be set to nil. internetName should be large
  3112. enough to hold the internetName. InterNetname returned indicates path finder's
  3113. local internet (configured by administrator).
  3114. *)
  3115. (*
  3116. GetDNodeInfo:
  3117. This call will return the information (internetName and descriptor)
  3118. for the given RLI of a DNode.
  3119. *)
  3120.     DirGetDNodeInfoPB* = RECORD
  3121.         qLink*:                    Types.Ptr;
  3122.         reserved1*:                LONGINT;
  3123.         reserved2*:                LONGINT;
  3124.         ioCompletion*:            DirIOCompletionUPP;
  3125.         ioResult*:                Types.OSErr;
  3126.         saveA5*:                    LONGINT;
  3127.         reqCode*:                INTEGER;
  3128.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3129.         serverHint*:                AppleTalk.AddrBlock;
  3130.         dsRefNum*:                INTEGER;
  3131.         callID*:                    LONGINT;
  3132.         identity*:                AuthIdentity;
  3133.         gReserved1*:                LONGINT;
  3134.         gReserved2*:                LONGINT;
  3135.         gReserved3*:                LONGINT;
  3136.         clientData*:                LONGINT;
  3137.         pRLI*:                    OCE.PackedRLIPtr;                            (*  --> packed RLI whose info is requested *)
  3138.         descriptor*:                OCE.DirNodeKind;                            (* <--  dNode descriptor *)
  3139.         networkSpec*:            OCE.NetworkSpecPtr;                            (* <--  cluster's networkSpec if kIsCluster *)
  3140.     END;
  3141.  
  3142. (*
  3143. If DnodeNumber is set to a non zero value, path should be set to nil.
  3144. if DnodeNumber is set to zero, pathName should point to a packed path name.
  3145. internetName should be large enough to hold
  3146. the internetName. (If the internetName is same as the one got by
  3147. GetLocalInternetName call, it indicates cluster is reachable  without
  3148. forwarders, --> Tell me if I am wrong)
  3149. *)
  3150. (*
  3151. DirCreatePersonalDirectory:
  3152. A new  personal catalog can be created by specifying an Files.FSSpec for
  3153. the file. If a file already exists dupFNErr will be returned. This call is
  3154. supported 'synchronous' mode only.
  3155. *)
  3156.     DirCreatePersonalDirectoryPB* = RECORD
  3157.         qLink*:                    Types.Ptr;
  3158.         reserved1*:                LONGINT;
  3159.         reserved2*:                LONGINT;
  3160.         ioCompletion*:            DirIOCompletionUPP;
  3161.         ioResult*:                Types.OSErr;
  3162.         saveA5*:                    LONGINT;
  3163.         reqCode*:                INTEGER;
  3164.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3165.         serverHint*:                AppleTalk.AddrBlock;
  3166.         dsRefNum*:                INTEGER;
  3167.         callID*:                    LONGINT;
  3168.         identity*:                AuthIdentity;
  3169.         gReserved1*:                LONGINT;
  3170.         gReserved2*:                LONGINT;
  3171.         gReserved3*:                LONGINT;
  3172.         clientData*:                LONGINT;
  3173.         fsSpec*:                    Files.FSSpecPtr;                                (*  --> Files.FSSpec for the Personal Catalog *)
  3174.         fdType*:                    Types.OSType;                                    (*  --> file type for the Personal Catalog *)
  3175.         fdCreator*:                Types.OSType;                                    (*  --> file creator for the Personal Catalog *)
  3176.     END;
  3177.  
  3178. (*
  3179. DirOpenPersonalDirectory:
  3180. An existing personal catalog can be opened using this call.
  3181. User can specify the personal catalog by Files.FSSpec for the AddressBook file.
  3182. 'accessRequested' field specifies open permissions. 'fsRdPermLONG("  & ")fsRdWrPerm'
  3183. are the only accepted open modes for the address book.
  3184. When the call completes successfully, a dsRefNum will be returned. The 'dsRefNum'
  3185. field is in the DSParamBlockHeader. In addittion 'accessGranted' indicates
  3186. actual permission with personal catalog is opened and 'features' indicate the capabilty flags
  3187. associated with the personal catalog.
  3188. This call is supported 'synchronous' mode only.
  3189. *)
  3190.     DirOpenPersonalDirectoryPB* = RECORD
  3191.         qLink*:                    Types.Ptr;
  3192.         reserved1*:                LONGINT;
  3193.         reserved2*:                LONGINT;
  3194.         ioCompletion*:            DirIOCompletionUPP;
  3195.         ioResult*:                Types.OSErr;
  3196.         saveA5*:                    LONGINT;
  3197.         reqCode*:                INTEGER;
  3198.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3199.         serverHint*:                AppleTalk.AddrBlock;
  3200.         dsRefNum*:                INTEGER;
  3201.         callID*:                    LONGINT;
  3202.         identity*:                AuthIdentity;
  3203.         gReserved1*:                LONGINT;
  3204.         gReserved2*:                LONGINT;
  3205.         gReserved3*:                LONGINT;
  3206.         clientData*:                LONGINT;
  3207.         fsSpec*:                    Files.FSSpecPtr;                                (*  --> Open an existing Personal Catalog *)
  3208.         accessRequested*:        CHAR;                                    (*  --> Open*: permissions Requested(byte)*)
  3209.         accessGranted*:            CHAR;                                    (*  <-- Open*: permissions (byte) (Granted)*)
  3210.         features*:                DirGestalt;                                (* <--  features for Personal Catalog *)
  3211.     END;
  3212.  
  3213. (*
  3214. DirClosePersonalDirectory: This call lets a client close AddressBook opened by DirOpenPersonalDirectory.
  3215. The Personal Catalog specified by the 'dsRefNum' will be closed.
  3216. This call is supported 'synchronous' mode only.
  3217. *)
  3218.     DirClosePersonalDirectoryPB* = RECORD
  3219.         qLink*:                    Types.Ptr;
  3220.         reserved1*:                LONGINT;
  3221.         reserved2*:                LONGINT;
  3222.         ioCompletion*:            DirIOCompletionUPP;
  3223.         ioResult*:                Types.OSErr;
  3224.         saveA5*:                    LONGINT;
  3225.         reqCode*:                INTEGER;
  3226.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3227.         serverHint*:                AppleTalk.AddrBlock;
  3228.         dsRefNum*:                INTEGER;
  3229.         callID*:                    LONGINT;
  3230.         identity*:                AuthIdentity;
  3231.         gReserved1*:                LONGINT;
  3232.         gReserved2*:                LONGINT;
  3233.         gReserved3*:                LONGINT;
  3234.         clientData*:                LONGINT;
  3235.     END;
  3236.  
  3237. (*
  3238. DirMakePersonalDirectoryRLI: With this call a client can make an RLI
  3239. for a Personal Catalog opened by DirOpenPersonalDirectory Call.
  3240. A packed RLI is created for the Personal Catalog specified by the 'dsRefNum'.
  3241. If a client has a need to make the AddressBook reference to persistent
  3242. acrross boots it should make use of this call. In the current implementaion
  3243. PackedRLI has an embeeded System7.0 'alias'. If in later time
  3244. If client has a need to make reference to the AddressBook, it must use
  3245. ADAPLibrary call 'DUExtractAlias' and resole the 'aliasLONG(" to ")Files.FSSpec' and
  3246. make DirOpenPersonalDirectory call to get a 'dsRefNum'.
  3247.   'fromFSSpec'            FSPecPtr from which relative alias to be created. If nil,
  3248.                         absolute alias is created.
  3249.  'pRLIBufferSize' indicates the size of buffer pointed by LONG("pRLI")
  3250.  'pRLISize'    indicates the actual length of LONG("pRLI"). If the call
  3251.                         fails with 'kOCEMoreData' error a client can reissue
  3252.                     this call with a larger buffer of this length.
  3253.   LONG("pRLI") is pointer to the buffer in which 'PackedRLI' is
  3254.   returned.
  3255. This call is supported in 'synchronous' mode only.
  3256. *)
  3257.     DirMakePersonalDirectoryRLIPB* = RECORD
  3258.         qLink*:                    Types.Ptr;
  3259.         reserved1*:                LONGINT;
  3260.         reserved2*:                LONGINT;
  3261.         ioCompletion*:            DirIOCompletionUPP;
  3262.         ioResult*:                Types.OSErr;
  3263.         saveA5*:                    LONGINT;
  3264.         reqCode*:                INTEGER;
  3265.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3266.         serverHint*:                AppleTalk.AddrBlock;
  3267.         dsRefNum*:                INTEGER;
  3268.         callID*:                    LONGINT;
  3269.         identity*:                AuthIdentity;
  3270.         gReserved1*:                LONGINT;
  3271.         gReserved2*:                LONGINT;
  3272.         gReserved3*:                LONGINT;
  3273.         clientData*:                LONGINT;
  3274.         fromFSSpec*:                Files.FSSpecPtr;                                (*  --> Files.FSSpec for creating relative alia *)
  3275.         pRLIBufferSize*:            INTEGER;                                (*  --> Length of LONG("pRLI") buffer *)
  3276.         pRLISize*:                INTEGER;                                (* <--  Length of actual LONG("pRLI") *)
  3277.         pRLI*:                    OCE.PackedRLIPtr;                            (* <--  pRLI for the specified AddressBook *)
  3278.     END;
  3279.  
  3280. (*****************************************************************************
  3281. The calls described below apply only for CSAM Drivers*:
  3282.  
  3283. The following three calls provide capability to Install/Remove a CSAM at RunTime.
  3284.     DirAddDSAM
  3285.     DirRemoveDSAM
  3286.     DirInstantiateDSAM
  3287.  
  3288. The following two calls provide capability to Install/Remove a CSAM Catalog at RunTime.
  3289.     DirAddDSAMDirectory
  3290.     DirRemoveDirectory
  3291.  
  3292. DirGetDirectoryIcon call is used by clients to get any special icon associated
  3293. with a CSAM catalog.
  3294.  
  3295. *****************************************************************************)
  3296. (*
  3297. DirAddDSAM: This call can be used to inorm the availability of a CSAM file
  3298. after discovering the CSAM file.
  3299.     dsamName -> is generic CSAM name e.g. Untitled X.500 directory
  3300.     dsamSignature -> could be generic CSAM kind e.g. LONG("X500").
  3301.     fsSpec -> is the FileSpec for the file containing CSAM resources.
  3302. If the call is successfull 'DSAMRecordCID' will be returned. If the
  3303. call returns 'daDSAMRecordCIDExists', record was already there and
  3304. 'dsamRecordCID' will be returned.
  3305. This call can be done only in synchronous mode.
  3306. *)
  3307.     DirAddDSAMPB* = RECORD
  3308.         qLink*:                    Types.Ptr;
  3309.         reserved1*:                LONGINT;
  3310.         reserved2*:                LONGINT;
  3311.         ioCompletion*:            DirIOCompletionUPP;
  3312.         ioResult*:                Types.OSErr;
  3313.         saveA5*:                    LONGINT;
  3314.         reqCode*:                INTEGER;
  3315.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3316.         serverHint*:                AppleTalk.AddrBlock;
  3317.         dsRefNum*:                INTEGER;
  3318.         callID*:                    LONGINT;
  3319.         identity*:                AuthIdentity;
  3320.         gReserved1*:                LONGINT;
  3321.         gReserved2*:                LONGINT;
  3322.         gReserved3*:                LONGINT;
  3323.         clientData*:                LONGINT;
  3324.         dsamRecordCID*:            OCE.CreationID;                                (* <--  OCE.CreationID for the CSAM record *)
  3325.         dsamName*:                OCE.RStringPtr;                                (*  --> CSAM name *)
  3326.         dsamKind*:                OCE.OCEDirectoryKind;                        (*  --> CSAM kind *)
  3327.         fsSpec*:                    Files.FSSpecPtr;                                (*  --> Files.FSSpec for the file containing CSAM *)
  3328.     END;
  3329.  
  3330. (*
  3331. DirInstantiateDSAM: This call should be used by the CSAM driver in response
  3332. Driver Open call to indicate the toolbox about the availability of the CSAM.
  3333.     dsamName -> is generic CSAM name e.g. Untitled X.500 directory
  3334.     dsamKind -> could be generic CSAM kind e.g. LONG("X500").
  3335.     dsamData -> pointer to private DSAMData. This will be paased back to the CSAM
  3336.     when the CSAM functions (DSAMDirProc,DSAMDirParseProc, DSAMAuthProc) are called.
  3337.     CSAM should already be setup using DirAddDSAM call.
  3338.     DSAMDirProc -> This procedure will* be called when  any catalog service
  3339.     call intended for the CSAM (other then parse calls)
  3340.     DSAMDirParseProc -> This procedure will* be called when any of the parse calls
  3341.     are called.
  3342.     DSAMAuthProc -> This procedure will* be called when any of the Authentication Calls
  3343.     are made to the CSAM. If the CSAM does not support authentication, this can be nil.
  3344. This call can be done only in synchronous mode.
  3345. *)
  3346.     DSAMDirProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (dsamData: Types.Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  3347.     DSAMDirUPP* = Types.UniversalProcPtr;
  3348.  
  3349.     DSAMDirProc* = DSAMDirUPP;
  3350.  
  3351.     DSAMDirParseProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (dsamData: Types.Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  3352.     DSAMDirParseUPP* = Types.UniversalProcPtr;
  3353.  
  3354.     DSAMDirParseProc* = DSAMDirParseUPP;
  3355.  
  3356.     DSAMAuthProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (dsamData: Types.Ptr; pb: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  3357.     DSAMAuthUPP* = Types.UniversalProcPtr;
  3358.  
  3359.     DSAMAuthProc* = DSAMAuthUPP;
  3360.  
  3361.     DirInstantiateDSAMPB* = RECORD
  3362.         qLink*:                    Types.Ptr;
  3363.         reserved1*:                LONGINT;
  3364.         reserved2*:                LONGINT;
  3365.         ioCompletion*:            DirIOCompletionUPP;
  3366.         ioResult*:                Types.OSErr;
  3367.         saveA5*:                    LONGINT;
  3368.         reqCode*:                INTEGER;
  3369.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3370.         serverHint*:                AppleTalk.AddrBlock;
  3371.         dsRefNum*:                INTEGER;
  3372.         callID*:                    LONGINT;
  3373.         identity*:                AuthIdentity;
  3374.         gReserved1*:                LONGINT;
  3375.         gReserved2*:                LONGINT;
  3376.         gReserved3*:                LONGINT;
  3377.         clientData*:                LONGINT;
  3378.         dsamName*:                OCE.RStringPtr;                                (*  --> dsamName name *)
  3379.         dsamKind*:                OCE.OCEDirectoryKind;                        (*  --> DSAMKind *)
  3380.         dsamData*:                Types.Ptr;                                    (*  --> dsamData  *)
  3381.         dsamDirProc*:            DSAMDirUPP;                                (*  --> of type DSAMDirProc*: for catalog service calls *)
  3382.         dsamDirParseProc*:        DSAMDirParseUPP;                        (*  --> of type DSAMDirParseProc*: for catalog service parse calls *)
  3383.         dsamAuthProc*:            DSAMAuthUPP;                            (*  --> of type DSAMAuthProc*: for authetication service calls *)
  3384.     END;
  3385.  
  3386. (*
  3387. DirRemoveDSAM: This call can be used to remove  a CSAM file from the OCE Setup.
  3388.     dsamRecordCID -> is the creationID of the CSAM record.
  3389. This call can be made only in synchronous mode.
  3390. *)
  3391.     DirRemoveDSAMPB* = RECORD
  3392.         qLink*:                    Types.Ptr;
  3393.         reserved1*:                LONGINT;
  3394.         reserved2*:                LONGINT;
  3395.         ioCompletion*:            DirIOCompletionUPP;
  3396.         ioResult*:                Types.OSErr;
  3397.         saveA5*:                    LONGINT;
  3398.         reqCode*:                INTEGER;
  3399.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3400.         serverHint*:                AppleTalk.AddrBlock;
  3401.         dsRefNum*:                INTEGER;
  3402.         callID*:                    LONGINT;
  3403.         identity*:                AuthIdentity;
  3404.         gReserved1*:                LONGINT;
  3405.         gReserved2*:                LONGINT;
  3406.         gReserved3*:                LONGINT;
  3407.         clientData*:                LONGINT;
  3408.         dsamRecordCID*:            OCE.CreationID;                                (* <--  OCE.CreationID for the CSAM record *)
  3409.     END;
  3410.  
  3411. (*
  3412. DirAddDSAMDirectory: This call can be used to inorm the availability of a CSAM catalog.
  3413.     dsamRecordCID ->  recordID for the CSAM serving this catalog
  3414.     directoryName ->  name of the catalog
  3415.     discriminator -> discriminator for the catalog
  3416.     directoryRecordCID -> If the call is successful, creationID for the record will
  3417.                             be returned.
  3418. *)
  3419.     DirAddDSAMDirectoryPB* = RECORD
  3420.         qLink*:                    Types.Ptr;
  3421.         reserved1*:                LONGINT;
  3422.         reserved2*:                LONGINT;
  3423.         ioCompletion*:            DirIOCompletionUPP;
  3424.         ioResult*:                Types.OSErr;
  3425.         saveA5*:                    LONGINT;
  3426.         reqCode*:                INTEGER;
  3427.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3428.         serverHint*:                AppleTalk.AddrBlock;
  3429.         dsRefNum*:                INTEGER;
  3430.         callID*:                    LONGINT;
  3431.         identity*:                AuthIdentity;
  3432.         gReserved1*:                LONGINT;
  3433.         gReserved2*:                LONGINT;
  3434.         gReserved3*:                LONGINT;
  3435.         clientData*:                LONGINT;
  3436.         dsamRecordCID*:            OCE.CreationID;                                (*  --> OCE.CreationID for the CSAM record *)
  3437.         directoryName*:            OCE.DirectoryNamePtr;                        (*  --> catalog name *)
  3438.         discriminator*:            OCE.DirDiscriminator;                        (*  --> catalog discriminator *)
  3439.         features*:                DirGestalt;                                (*  --> capabilty flags for the catalog *)
  3440.         directoryRecordCID*:        OCE.CreationID;                                (* <--  creationID for the catalog record *)
  3441.     END;
  3442.  
  3443. (*
  3444. DirRemoveDirectory: This call can be used to inform the toolbox that
  3445. catalog specified by 'directoryRecordCID'
  3446. *)
  3447.     DirRemoveDirectoryPB* = RECORD
  3448.         qLink*:                    Types.Ptr;
  3449.         reserved1*:                LONGINT;
  3450.         reserved2*:                LONGINT;
  3451.         ioCompletion*:            DirIOCompletionUPP;
  3452.         ioResult*:                Types.OSErr;
  3453.         saveA5*:                    LONGINT;
  3454.         reqCode*:                INTEGER;
  3455.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3456.         serverHint*:                AppleTalk.AddrBlock;
  3457.         dsRefNum*:                INTEGER;
  3458.         callID*:                    LONGINT;
  3459.         identity*:                AuthIdentity;
  3460.         gReserved1*:                LONGINT;
  3461.         gReserved2*:                LONGINT;
  3462.         gReserved3*:                LONGINT;
  3463.         clientData*:                LONGINT;
  3464.         directoryRecordCID*:        OCE.CreationID;                                (*  --> creationID for the catalog record *)
  3465.     END;
  3466.  
  3467. (*
  3468.  * DSGetExtendedDirectoriesInfo*::  This call can be used to get
  3469.  * the information of various foreign catalogs supported.
  3470.  * Typically a DE Template  may make this call to create a
  3471.  * Address template or a Gateway may make this call to findout
  3472.  * catalog name space in which MSAM may would support. 
  3473.  * Client will supply a buffer pointed by 'bufferPtr' of size 'bufferLength'. 
  3474.  * When the call completes with 'daMoreData' error, client can examine 'totalEntries'
  3475.  * returned and reissue the call with increaing buffer.
  3476.  * Toolbox will findout the private information of each of the Foreign Catalogs
  3477.  * by polling CSAM's, Gateways, and MnMServers. The Information returned
  3478.  * for each catalog will be packed in the format*: 
  3479.  * typedef struct EachDirectoryData (
  3480.  *  PackedRLI                        pRLI;           //  packed RLI for the catalog
  3481.  *  Types.OSType                            entnType;        //  Entn Type
  3482.  *  long                            hasMailSlot;   //  If this catalog has mail slot this will be 1 otherwise zero
  3483.  *    ProtoRString                    RealName;      //  Packed RString for Real Name (padded to even boundary) 
  3484.  *    ProtoRString                    comment;       //  Packed RString holding any comment for Display (padded to even boundary)
  3485.  *    long                            length;        //  data length
  3486.  *    char                            data[length];  //  data padded to even boundary
  3487.  * );
  3488.  *
  3489.  *
  3490.  *
  3491.  * typedef struct myData (
  3492.  *      EachDirectoryData    data[numberOfEntries];    // data packed in the above format
  3493.  *    );
  3494.  *
  3495.  *)
  3496.     DirGetExtendedDirectoriesInfoPB* = RECORD
  3497.         qLink*:                    Types.Ptr;
  3498.         reserved1*:                LONGINT;
  3499.         reserved2*:                LONGINT;
  3500.         ioCompletion*:            DirIOCompletionUPP;
  3501.         ioResult*:                Types.OSErr;
  3502.         saveA5*:                    LONGINT;
  3503.         reqCode*:                INTEGER;
  3504.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3505.         serverHint*:                AppleTalk.AddrBlock;
  3506.         dsRefNum*:                INTEGER;
  3507.         callID*:                    LONGINT;
  3508.         identity*:                AuthIdentity;
  3509.         gReserved1*:                LONGINT;
  3510.         gReserved2*:                LONGINT;
  3511.         gReserved3*:                LONGINT;
  3512.         clientData*:                LONGINT;
  3513.         buffer*:                    Types.Ptr;                                    (*  --> Pointer to a buufer where data will be returned *)
  3514.         bufferSize*:                LONGINT;                                (*  --> Length of the buffer, Length of actual data will be returned here *)
  3515.         totalEntries*:            LONGINT;                                (* <--  Total Number of Catalogs found *)
  3516.         actualEntries*:            LONGINT;                                (* <--  Total Number of Catalogs entries returned *)
  3517.     END;
  3518.  
  3519. (*
  3520. DirGetDirectoryIconPB: With this call a client can find out about
  3521. the icons supported by the Catalog.
  3522. Both ADAP and Personal Catalog will not support this call for now.
  3523. A CSAM can support a call so that DE Extension can use this
  3524. call to find appropriate Icons.
  3525.  
  3526. Returns kOCEBufferTooSmall if icon is too small, but will update iconSize.
  3527. *)
  3528.     DirGetDirectoryIconPB* = RECORD
  3529.         qLink*:                    Types.Ptr;
  3530.         reserved1*:                LONGINT;
  3531.         reserved2*:                LONGINT;
  3532.         ioCompletion*:            DirIOCompletionUPP;
  3533.         ioResult*:                Types.OSErr;
  3534.         saveA5*:                    LONGINT;
  3535.         reqCode*:                INTEGER;
  3536.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3537.         serverHint*:                AppleTalk.AddrBlock;
  3538.         dsRefNum*:                INTEGER;
  3539.         callID*:                    LONGINT;
  3540.         identity*:                AuthIdentity;
  3541.         gReserved1*:                LONGINT;
  3542.         gReserved2*:                LONGINT;
  3543.         gReserved3*:                LONGINT;
  3544.         clientData*:                LONGINT;
  3545.         pRLI*:                    OCE.PackedRLIPtr;                            (*  --> packed RLI for the catalog *)
  3546.         iconType*:                Types.OSType;                                    (*  --> Type of Icon requested *)
  3547.         iconBuffer*:                Types.Ptr;                                    (*  --> Buffer to hold Icon Data *)
  3548.         bufferSize*:                LONGINT;                                (*  <-> size of buffer to hold icon data *)
  3549.     END;
  3550.  
  3551. (*
  3552. DirGetOCESetupRefNum: This call will return 'dsRefnum' for the OCE Setup Personal Catalog
  3553. and oceSetupRecordCID for the oceSetup Record.
  3554. Clients interested in manipulating OCE Setup Personal Catalog directly should
  3555. make this call to get 'dsRefNum'.
  3556. 'dsRefNum' will be returned in the standard field in the DirParamHeader.
  3557. *)
  3558.     DirGetOCESetupRefNumPB* = RECORD
  3559.         qLink*:                    Types.Ptr;
  3560.         reserved1*:                LONGINT;
  3561.         reserved2*:                LONGINT;
  3562.         ioCompletion*:            DirIOCompletionUPP;
  3563.         ioResult*:                Types.OSErr;
  3564.         saveA5*:                    LONGINT;
  3565.         reqCode*:                INTEGER;
  3566.         reserved*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3567.         serverHint*:                AppleTalk.AddrBlock;
  3568.         dsRefNum*:                INTEGER;
  3569.         callID*:                    LONGINT;
  3570.         identity*:                AuthIdentity;
  3571.         gReserved1*:                LONGINT;
  3572.         gReserved2*:                LONGINT;
  3573.         gReserved3*:                LONGINT;
  3574.         clientData*:                LONGINT;
  3575.         oceSetupRecordCID*:        OCE.CreationID;                                (* --> creationID for the catalog record *)
  3576.     END;
  3577.  
  3578. (*****************************************************************************)
  3579. (* Catalog and Authentication control blocks and operation definitions *)
  3580.     AuthParamBlock* = RECORD
  3581.         (*ΔΔ CASE INTEGER OF
  3582.         0: ( *)
  3583.             qLink*:                        Types.Ptr;
  3584.             reserved1*:                    LONGINT;
  3585.             reserved2*:                    LONGINT;
  3586.             ioCompletion*:                AuthIOCompletionUPP;
  3587.             ioResult*:                    Types.OSErr;
  3588.             saveA5*:                        LONGINT;
  3589.             reqCode*:                    INTEGER;
  3590.             reserved*:                    ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3591.             serverHint*:                    AppleTalk.AddrBlock;
  3592.             dsRefNum*:                    INTEGER;
  3593.             callID*:                        LONGINT;
  3594.             identity*:                    AuthIdentity;
  3595.             gReserved1*:                    LONGINT;
  3596.             gReserved2*:                    LONGINT;
  3597.             gReserved3*:                    LONGINT;
  3598.             clientData*:                    LONGINT;
  3599.            (*ΔΔ );
  3600.         1: (
  3601.             bindIdentityPB*:                AuthBindSpecificIdentityPB;
  3602.            );
  3603.         2: (
  3604.             unbindIdentityPB*:            AuthUnbindSpecificIdentityPB;
  3605.            );
  3606.         3: (
  3607.             resolveCreationIDPB*:        AuthResolveCreationIDPB;
  3608.            );
  3609.         4: (
  3610.             getIdentityInfoPB*:            AuthGetSpecificIdentityInfoPB;
  3611.            );
  3612.         5: (
  3613.             addKeyPB*:                    AuthAddKeyPB;
  3614.            );
  3615.         6: (
  3616.             changeKeyPB*:                AuthChangeKeyPB;
  3617.            );
  3618.         7: (
  3619.             deleteKeyPB*:                AuthDeleteKeyPB;
  3620.            );
  3621.         8: (
  3622.             passwordToKeyPB*:            AuthPasswordToKeyPB;
  3623.            );
  3624.         9: (
  3625.             getCredentialsPB*:            AuthGetCredentialsPB;
  3626.            );
  3627.         10: (
  3628.             decryptCredentialsPB*:        AuthDecryptCredentialsPB;
  3629.            );
  3630.         11: (
  3631.             makeChallengePB*:            AuthMakeChallengePB;
  3632.            );
  3633.         12: (
  3634.             makeReplyPB*:                AuthMakeReplyPB;
  3635.            );
  3636.         13: (
  3637.             verifyReplyPB*:                AuthVerifyReplyPB;
  3638.            );
  3639.         14: (
  3640.             getUTCTimePB*:                AuthGetUTCTimePB;
  3641.            );
  3642.         15: (
  3643.             makeProxyPB*:                AuthMakeProxyPB;
  3644.            );
  3645.         16: (
  3646.             tradeProxyForCredentialsPB*:    AuthTradeProxyForCredentialsPB;
  3647.            );
  3648.         17: (
  3649.             getLocalIdentityPB*:            AuthGetLocalIdentityPB;
  3650.            );
  3651.         18: (
  3652.             unLockLocalIdentityPB*:        AuthUnlockLocalIdentityPB;
  3653.            );
  3654.         19: (
  3655.             lockLocalIdentityPB*:        AuthLockLocalIdentityPB;
  3656.            );
  3657.         20: (
  3658.             localIdentityQInstallPB*:    AuthAddToLocalIdentityQueuePB;
  3659.            );
  3660.         21: (
  3661.             localIdentityQRemovePB*:        AuthRemoveFromLocalIdentityQueuePB;
  3662.            );
  3663.         22: (
  3664.             setupLocalIdentityPB*:        AuthSetupLocalIdentityPB;
  3665.            );
  3666.         23: (
  3667.             changeLocalIdentityPB*:        AuthChangeLocalIdentityPB;
  3668.            );
  3669.         24: (
  3670.             removeLocalIdentityPB*:        AuthRemoveLocalIdentityPB;
  3671.            );
  3672.         25: (
  3673.             setupDirectoryIdentityPB*:    OCESetupAddDirectoryInfoPB;
  3674.            );
  3675.         26: (
  3676.             changeDirectoryIdentityPB*:    OCESetupChangeDirectoryInfoPB;
  3677.            );
  3678.         27: (
  3679.             removeDirectoryIdentityPB*:    OCESetupRemoveDirectoryInfoPB;
  3680.            );
  3681.         28: (
  3682.             getDirectoryIdentityInfoPB*:    OCESetupGetDirectoryInfoPB;
  3683.            );*)
  3684.     END;
  3685.  
  3686.     DirParamBlock* = RECORD
  3687.         (*ΔΔ CASE INTEGER OF
  3688.         0: ( *)
  3689.             qLink*:                        Types.Ptr;
  3690.             reserved1*:                    LONGINT;
  3691.             reserved2*:                    LONGINT;
  3692.             ioCompletion*:                DirIOCompletionUPP;
  3693.             ioResult*:                    Types.OSErr;
  3694.             saveA5*:                        LONGINT;
  3695.             reqCode*:                    INTEGER;
  3696.             reserved*:                    ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  3697.             serverHint*:                    AppleTalk.AddrBlock;
  3698.             dsRefNum*:                    INTEGER;
  3699.             callID*:                        LONGINT;
  3700.             identity*:                    AuthIdentity;
  3701.             gReserved1*:                    LONGINT;
  3702.             gReserved2*:                    LONGINT;
  3703.             gReserved3*:                    LONGINT;
  3704.             clientData*:                    LONGINT;
  3705.            (*ΔΔ );
  3706.         1: (
  3707.             addRecordPB*:                DirAddRecordPB;
  3708.            );
  3709.         2: (
  3710.             deleteRecordPB*:                DirDeleteRecordPB;
  3711.            );
  3712.         3: (
  3713.             enumerateGetPB*:                DirEnumerateGetPB;
  3714.            );
  3715.         4: (
  3716.             enumerateParsePB*:            DirEnumerateParsePB;
  3717.            );
  3718.         5: (
  3719.             findRecordGetPB*:            DirFindRecordGetPB;
  3720.            );
  3721.         6: (
  3722.             findRecordParsePB*:            DirFindRecordParsePB;
  3723.            );
  3724.         7: (
  3725.             lookupGetPB*:                DirLookupGetPB;
  3726.            );
  3727.         8: (
  3728.             lookupParsePB*:                DirLookupParsePB;
  3729.            );
  3730.         9: (
  3731.             addAttributeValuePB*:        DirAddAttributeValuePB;
  3732.            );
  3733.         10: (
  3734.             deleteAttributeTypePB*:        DirDeleteAttributeTypePB;
  3735.            );
  3736.         11: (
  3737.             deleteAttributeValuePB*:        DirDeleteAttributeValuePB;
  3738.            );
  3739.         12: (
  3740.             changeAttributeValuePB*:        DirChangeAttributeValuePB;
  3741.            );
  3742.         13: (
  3743.             verifyAttributeValuePB*:        DirVerifyAttributeValuePB;
  3744.            );
  3745.         14: (
  3746.             findValuePB*:                DirFindValuePB;
  3747.            );
  3748.         15: (
  3749.             enumeratePseudonymGetPB*:    DirEnumeratePseudonymGetPB;
  3750.            );
  3751.         16: (
  3752.             enumeratePseudonymParsePB*:    DirEnumeratePseudonymParsePB;
  3753.            );
  3754.         17: (
  3755.             addPseudonymPB*:                DirAddPseudonymPB;
  3756.            );
  3757.         18: (
  3758.             deletePseudonymPB*:            DirDeletePseudonymPB;
  3759.            );
  3760.         19: (
  3761.             addAliasPB*:                    DirAddAliasPB;
  3762.            );
  3763.         20: (
  3764.             enumerateAttributeTypesGetPB*: DirEnumerateAttributeTypesGetPB;
  3765.            );
  3766.         21: (
  3767.             enumerateAttributeTypesParsePB*: DirEnumerateAttributeTypesParsePB;
  3768.            );
  3769.         22: (
  3770.             getNameAndTypePB*:            DirGetNameAndTypePB;
  3771.            );
  3772.         23: (
  3773.             setNameAndTypePB*:            DirSetNameAndTypePB;
  3774.            );
  3775.         24: (
  3776.             getRecordMetaInfoPB*:        DirGetRecordMetaInfoPB;
  3777.            );
  3778.         25: (
  3779.             getDNodeMetaInfoPB*:            DirGetDNodeMetaInfoPB;
  3780.            );
  3781.         26: (
  3782.             getDirectoryInfoPB*:            DirGetDirectoryInfoPB;
  3783.            );
  3784.         27: (
  3785.             getDNodeAccessControlGetPB*:    DirGetDNodeAccessControlGetPB;
  3786.            );
  3787.         28: (
  3788.             getDNodeAccessControlParsePB*: DirGetDNodeAccessControlParsePB;
  3789.            );
  3790.         29: (
  3791.             getRecordAccessControlGetPB*: DirGetRecordAccessControlGetPB;
  3792.            );
  3793.         30: (
  3794.             getRecordAccessControlParsePB*: DirGetRecordAccessControlParsePB;
  3795.            );
  3796.         31: (
  3797.             getAttributeAccessControlGetPB*: DirGetAttributeAccessControlGetPB;
  3798.            );
  3799.         32: (
  3800.             getAttributeAccessControlParsePB*: DirGetAttributeAccessControlParsePB;
  3801.            );
  3802.         33: (
  3803.             enumerateDirectoriesGetPB*:    DirEnumerateDirectoriesGetPB;
  3804.            );
  3805.         34: (
  3806.             enumerateDirectoriesParsePB*: DirEnumerateDirectoriesParsePB;
  3807.            );
  3808.         35: (
  3809.             addADAPDirectoryPB*:            DirAddADAPDirectoryPB;
  3810.            );
  3811.         36: (
  3812.             removeDirectoryPB*:            DirRemoveDirectoryPB;
  3813.            );
  3814.         37: (
  3815.             netSearchADAPDirectoriesGetPB*: DirNetSearchADAPDirectoriesGetPB;
  3816.            );
  3817.         38: (
  3818.             netSearchADAPDirectoriesParsePB*: DirNetSearchADAPDirectoriesParsePB;
  3819.            );
  3820.         39: (
  3821.             findADAPDirectoryByNetSearchPB*: DirFindADAPDirectoryByNetSearchPB;
  3822.            );
  3823.         40: (
  3824.             mapDNodeNumberToPathNamePB*:    DirMapDNodeNumberToPathNamePB;
  3825.            );
  3826.         41: (
  3827.             mapPathNameToDNodeNumberPB*:    DirMapPathNameToDNodeNumberPB;
  3828.            );
  3829.         42: (
  3830.             getLocalNetworkSpecPB*:        DirGetLocalNetworkSpecPB;
  3831.            );
  3832.         43: (
  3833.             getDNodeInfoPB*:                DirGetDNodeInfoPB;
  3834.            );
  3835.         44: (
  3836.             createPersonalDirectoryPB*:    DirCreatePersonalDirectoryPB;
  3837.            );
  3838.         45: (
  3839.             openPersonalDirectoryPB*:    DirOpenPersonalDirectoryPB;
  3840.            );
  3841.         46: (
  3842.             closePersonalDirectoryPB*:    DirClosePersonalDirectoryPB;
  3843.            );
  3844.         47: (
  3845.             makePersonalDirectoryRLIPB*:    DirMakePersonalDirectoryRLIPB;
  3846.            );
  3847.         48: (
  3848.             addDSAMPB*:                    DirAddDSAMPB;
  3849.            );
  3850.         49: (
  3851.             instantiateDSAMPB*:            DirInstantiateDSAMPB;
  3852.            );
  3853.         50: (
  3854.             removeDSAMPB*:                DirRemoveDSAMPB;
  3855.            );
  3856.         51: (
  3857.             addDSAMDirectoryPB*:            DirAddDSAMDirectoryPB;
  3858.            );
  3859.         52: (
  3860.             getExtendedDirectoriesInfoPB*: DirGetExtendedDirectoriesInfoPB;
  3861.            );
  3862.         53: (
  3863.             getDirectoryIconPB*:            DirGetDirectoryIconPB;
  3864.            );
  3865.         54: (
  3866.             dirGetOCESetupRefNumPB*:        DirGetOCESetupRefNumPB;
  3867.            );
  3868.         55: (
  3869.             abortPB*:                    DirAbortPB;
  3870.            );*)
  3871.     END;
  3872.  
  3873. (*
  3874. pass kThisRecordOwnerMask, kFriendsMask, kAuthenticatedInDNodeMask, kAuthenticatedInDirectoryMask,
  3875. kGuestMask, or kMeMask to this routine, and it will return a pointer to a
  3876. OCE.DSSpec that can be used in the Get or Set Access Controls calls.
  3877. *)
  3878.  
  3879. PROCEDURE OCEGetAccessControlDSSpec*(categoryBitMask: CategoryMask): OCE.DSSpecPtr;
  3880.     (*$IF NOT GENERATINGCFM*)
  3881.     INLINE PASCAL $303C, 837, $AA5C;
  3882.     (*$END*)
  3883. CONST
  3884.     uppAuthIOCompletionProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *)
  3885.     uppNotificationProcInfo* = $00003FD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3886.     uppDirIOCompletionProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *)
  3887.     uppForEachDirEnumSpecProcInfo* = $000003D0; (* PROCEDURE (4 byte param, 4 byte param): 1 byte result; *)
  3888.     uppForEachRecordProcInfo* = $00000FD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3889.     uppForEachLookupRecordIDProcInfo* = $000003D0; (* PROCEDURE (4 byte param, 4 byte param): 1 byte result; *)
  3890.     uppForEachAttrTypeLookupProcInfo* = $00000FD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3891.     uppForEachAttrValueProcInfo* = $000003D0; (* PROCEDURE (4 byte param, 4 byte param): 1 byte result; *)
  3892.     uppForEachAttrTypeProcInfo* = $000003D0; (* PROCEDURE (4 byte param, 4 byte param): 1 byte result; *)
  3893.     uppForEachRecordIDProcInfo* = $000003D0; (* PROCEDURE (4 byte param, 4 byte param): 1 byte result; *)
  3894.     uppForEachDirectoryProcInfo* = $00003FD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3895.     uppForEachADAPDirectoryProcInfo* = $0000FFD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3896.     uppForEachDNodeAccessControlProcInfo* = $0000FFD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3897.     uppForEachRecordAccessControlProcInfo* = $0000FFD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3898.     uppForEachAttributeAccessControlProcInfo* = $0000FFD0; (* PROCEDURE (4 byte param, 4 byte param, 4 byte param, 4 byte param, 4 byte param): 1 byte result; *)
  3899.     uppDSAMDirProcInfo* = $000007E0; (* PROCEDURE (4 byte param, 4 byte param, 1 byte param): 2 byte result; *)
  3900.     uppDSAMDirParseProcInfo* = $000007E0; (* PROCEDURE (4 byte param, 4 byte param, 1 byte param): 2 byte result; *)
  3901.     uppDSAMAuthProcInfo* = $000007E0; (* PROCEDURE (4 byte param, 4 byte param, 1 byte param): 2 byte result; *)
  3902.  
  3903. PROCEDURE CallAuthIOCompletionProc*(paramBlock: AuthParamBlockPtr; userRoutine: AuthIOCompletionUPP);
  3904.     (*$IF NOT GENERATINGCFM*)
  3905.     INLINE PASCAL $205F, $4E90;
  3906.     (*$END*)
  3907.  
  3908. PROCEDURE CallNotificationProc*(clientData: LONGINT; callValue: AuthLocalIdentityOp; actionValue: AuthLocalIdentityLockAction; identity: LocalIdentity; userRoutine: NotificationUPP): BOOLEAN;
  3909.     (*$IF NOT GENERATINGCFM*)
  3910.     INLINE PASCAL $205F, $4E90;
  3911.     (*$END*)
  3912.  
  3913. PROCEDURE CallDirIOCompletionProc*(paramBlock: DirParamBlockPtr; userRoutine: DirIOCompletionUPP);
  3914.     (*$IF NOT GENERATINGCFM*)
  3915.     INLINE PASCAL $205F, $4E90;
  3916.     (*$END*)
  3917.  
  3918. PROCEDURE CallForEachDirEnumSpecProc*(clientData: LONGINT; (*CONST*)VAR enumSpec: DirEnumSpec; userRoutine: ForEachDirEnumSpecUPP): BOOLEAN;
  3919.     (*$IF NOT GENERATINGCFM*)
  3920.     INLINE PASCAL $205F, $4E90;
  3921.     (*$END*)
  3922.  
  3923. PROCEDURE CallForEachRecordProc*(clientData: LONGINT; (*CONST*)VAR enumSpec: DirEnumSpec; pRLI: OCE.PackedRLIPtr; userRoutine: ForEachRecordUPP): BOOLEAN;
  3924.     (*$IF NOT GENERATINGCFM*)
  3925.     INLINE PASCAL $205F, $4E90;
  3926.     (*$END*)
  3927.  
  3928. PROCEDURE CallForEachLookupRecordIDProc*(clientData: LONGINT; (*CONST*)VAR recordID: OCE.RecordID; userRoutine: ForEachLookupRecordIDUPP): BOOLEAN;
  3929.     (*$IF NOT GENERATINGCFM*)
  3930.     INLINE PASCAL $205F, $4E90;
  3931.     (*$END*)
  3932.  
  3933. PROCEDURE CallForEachAttrTypeLookupProc*(clientData: LONGINT; (*CONST*)VAR attrType: OCE.AttributeType; myAttrAccMask: AccessMask; userRoutine: ForEachAttrTypeLookupUPP): BOOLEAN;
  3934.     (*$IF NOT GENERATINGCFM*)
  3935.     INLINE PASCAL $205F, $4E90;
  3936.     (*$END*)
  3937.  
  3938. PROCEDURE CallForEachAttrValueProc*(clientData: LONGINT; (*CONST*)VAR attribute: OCE.Attribute; userRoutine: ForEachAttrValueUPP): BOOLEAN;
  3939.     (*$IF NOT GENERATINGCFM*)
  3940.     INLINE PASCAL $205F, $4E90;
  3941.     (*$END*)
  3942.  
  3943. PROCEDURE CallForEachAttrTypeProc*(clientData: LONGINT; (*CONST*)VAR attrType: OCE.AttributeType; userRoutine: ForEachAttrTypeUPP): BOOLEAN;
  3944.     (*$IF NOT GENERATINGCFM*)
  3945.     INLINE PASCAL $205F, $4E90;
  3946.     (*$END*)
  3947.  
  3948. PROCEDURE CallForEachRecordIDProc*(clientData: LONGINT; (*CONST*)VAR recordID: OCE.RecordID; userRoutine: ForEachRecordIDUPP): BOOLEAN;
  3949.     (*$IF NOT GENERATINGCFM*)
  3950.     INLINE PASCAL $205F, $4E90;
  3951.     (*$END*)
  3952.  
  3953. PROCEDURE CallForEachDirectoryProc*(clientData: LONGINT; (*CONST*)VAR dirName: OCE.DirectoryName; (*CONST*)VAR discriminator: OCE.DirDiscriminator; features: DirGestalt; userRoutine: ForEachDirectoryUPP): BOOLEAN;
  3954.     (*$IF NOT GENERATINGCFM*)
  3955.     INLINE PASCAL $205F, $4E90;
  3956.     (*$END*)
  3957.  
  3958. PROCEDURE CallForEachADAPDirectoryProc*(clientData: LONGINT; (*CONST*)VAR dirName: OCE.DirectoryName; (*CONST*)VAR discriminator: OCE.DirDiscriminator; features: DirGestalt; serverHint: AppleTalk.AddrBlock; userRoutine: ForEachADAPDirectoryUPP): BOOLEAN;
  3959.     (*$IF NOT GENERATINGCFM*)
  3960.     INLINE PASCAL $205F, $4E90;
  3961.     (*$END*)
  3962.  
  3963. PROCEDURE CallForEachDNodeAccessControlProc*(clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; defaultRecordAccMask: AccessMask; defaultAttributeAccMask: AccessMask; userRoutine: ForEachDNodeAccessControlUPP): BOOLEAN;
  3964.     (*$IF NOT GENERATINGCFM*)
  3965.     INLINE PASCAL $205F, $4E90;
  3966.     (*$END*)
  3967.  
  3968. PROCEDURE CallForEachRecordAccessControlProc*(clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; activeRecordAccMask: AccessMask; defaultAttributeAccMask: AccessMask; userRoutine: ForEachRecordAccessControlUPP): BOOLEAN;
  3969.     (*$IF NOT GENERATINGCFM*)
  3970.     INLINE PASCAL $205F, $4E90;
  3971.     (*$END*)
  3972.  
  3973. PROCEDURE CallForEachAttributeAccessControlProc*(clientData: LONGINT; (*CONST*)VAR dsObj: OCE.DSSpec; activeDnodeAccMask: AccessMask; activeRecordAccMask: AccessMask; activeAttributeAccMask: AccessMask; userRoutine: ForEachAttributeAccessControlUPP): BOOLEAN;
  3974.     (*$IF NOT GENERATINGCFM*)
  3975.     INLINE PASCAL $205F, $4E90;
  3976.     (*$END*)
  3977.  
  3978. PROCEDURE CallDSAMDirProc*(dsamData: Types.Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN; userRoutine: DSAMDirUPP): Types.OSErr;
  3979.     (*$IF NOT GENERATINGCFM*)
  3980.     INLINE PASCAL $205F, $4E90;
  3981.     (*$END*)
  3982.  
  3983. PROCEDURE CallDSAMDirParseProc*(dsamData: Types.Ptr; paramBlock: DirParamBlockPtr; async: BOOLEAN; userRoutine: DSAMDirParseUPP): Types.OSErr;
  3984.     (*$IF NOT GENERATINGCFM*)
  3985.     INLINE PASCAL $205F, $4E90;
  3986.     (*$END*)
  3987.  
  3988. PROCEDURE CallDSAMAuthProc*(dsamData: Types.Ptr; pb: AuthParamBlockPtr; async: BOOLEAN; userRoutine: DSAMAuthUPP): Types.OSErr;
  3989.     (*$IF NOT GENERATINGCFM*)
  3990.     INLINE PASCAL $205F, $4E90;
  3991.     (*$END*)
  3992.  
  3993. PROCEDURE NewAuthIOCompletionProc*(userRoutine: AuthIOCompletionProcPtr): AuthIOCompletionUPP;
  3994.     (*$IF NOT GENERATINGCFM *)
  3995.     INLINE PASCAL $2E9F;
  3996.     (*$END*)
  3997.  
  3998. PROCEDURE NewNotificationProc*(userRoutine: NotificationProcPtr): NotificationUPP;
  3999.     (*$IF NOT GENERATINGCFM *)
  4000.     INLINE PASCAL $2E9F;
  4001.     (*$END*)
  4002.  
  4003. PROCEDURE NewDirIOCompletionProc*(userRoutine: DirIOCompletionProcPtr): DirIOCompletionUPP;
  4004.     (*$IF NOT GENERATINGCFM *)
  4005.     INLINE PASCAL $2E9F;
  4006.     (*$END*)
  4007.  
  4008. PROCEDURE NewForEachDirEnumSpecProc*(userRoutine: ForEachDirEnumSpecProcPtr): ForEachDirEnumSpecUPP;
  4009.     (*$IF NOT GENERATINGCFM *)
  4010.     INLINE PASCAL $2E9F;
  4011.     (*$END*)
  4012.  
  4013. PROCEDURE NewForEachRecordProc*(userRoutine: ForEachRecordProcPtr): ForEachRecordUPP;
  4014.     (*$IF NOT GENERATINGCFM *)
  4015.     INLINE PASCAL $2E9F;
  4016.     (*$END*)
  4017.  
  4018. PROCEDURE NewForEachLookupRecordIDProc*(userRoutine: ForEachLookupRecordIDProcPtr): ForEachLookupRecordIDUPP;
  4019.     (*$IF NOT GENERATINGCFM *)
  4020.     INLINE PASCAL $2E9F;
  4021.     (*$END*)
  4022.  
  4023. PROCEDURE NewForEachAttrTypeLookupProc*(userRoutine: ForEachAttrTypeLookupProcPtr): ForEachAttrTypeLookupUPP;
  4024.     (*$IF NOT GENERATINGCFM *)
  4025.     INLINE PASCAL $2E9F;
  4026.     (*$END*)
  4027.  
  4028. PROCEDURE NewForEachAttrValueProc*(userRoutine: ForEachAttrValueProcPtr): ForEachAttrValueUPP;
  4029.     (*$IF NOT GENERATINGCFM *)
  4030.     INLINE PASCAL $2E9F;
  4031.     (*$END*)
  4032.  
  4033. PROCEDURE NewForEachAttrTypeProc*(userRoutine: ForEachAttrTypeProcPtr): ForEachAttrTypeUPP;
  4034.     (*$IF NOT GENERATINGCFM *)
  4035.     INLINE PASCAL $2E9F;
  4036.     (*$END*)
  4037.  
  4038. PROCEDURE NewForEachRecordIDProc*(userRoutine: ForEachRecordIDProcPtr): ForEachRecordIDUPP;
  4039.     (*$IF NOT GENERATINGCFM *)
  4040.     INLINE PASCAL $2E9F;
  4041.     (*$END*)
  4042.  
  4043. PROCEDURE NewForEachDirectoryProc*(userRoutine: ForEachDirectoryProcPtr): ForEachDirectoryUPP;
  4044.     (*$IF NOT GENERATINGCFM *)
  4045.     INLINE PASCAL $2E9F;
  4046.     (*$END*)
  4047.  
  4048. PROCEDURE NewForEachADAPDirectoryProc*(userRoutine: ForEachADAPDirectoryProcPtr): ForEachADAPDirectoryUPP;
  4049.     (*$IF NOT GENERATINGCFM *)
  4050.     INLINE PASCAL $2E9F;
  4051.     (*$END*)
  4052.  
  4053. PROCEDURE NewForEachDNodeAccessControlProc*(userRoutine: ForEachDNodeAccessControlProcPtr): ForEachDNodeAccessControlUPP;
  4054.     (*$IF NOT GENERATINGCFM *)
  4055.     INLINE PASCAL $2E9F;
  4056.     (*$END*)
  4057.  
  4058. PROCEDURE NewForEachRecordAccessControlProc*(userRoutine: ForEachRecordAccessControlProcPtr): ForEachRecordAccessControlUPP;
  4059.     (*$IF NOT GENERATINGCFM *)
  4060.     INLINE PASCAL $2E9F;
  4061.     (*$END*)
  4062.  
  4063. PROCEDURE NewForEachAttributeAccessControlProc*(userRoutine: ForEachAttributeAccessControlProcPtr): ForEachAttributeAccessControlUPP;
  4064.     (*$IF NOT GENERATINGCFM *)
  4065.     INLINE PASCAL $2E9F;
  4066.     (*$END*)
  4067.  
  4068. PROCEDURE NewDSAMDirProc*(userRoutine: DSAMDirProcPtr): DSAMDirUPP;
  4069.     (*$IF NOT GENERATINGCFM *)
  4070.     INLINE PASCAL $2E9F;
  4071.     (*$END*)
  4072.  
  4073. PROCEDURE NewDSAMDirParseProc*(userRoutine: DSAMDirParseProcPtr): DSAMDirParseUPP;
  4074.     (*$IF NOT GENERATINGCFM *)
  4075.     INLINE PASCAL $2E9F;
  4076.     (*$END*)
  4077.  
  4078. PROCEDURE NewDSAMAuthProc*(userRoutine: DSAMAuthProcPtr): DSAMAuthUPP;
  4079.     (*$IF NOT GENERATINGCFM *)
  4080.     INLINE PASCAL $2E9F;
  4081.     (*$END*)
  4082.  
  4083. CONST
  4084.     kAuthBindSpecificIdentity*    = $200;
  4085.     kAuthUnbindSpecificIdentity*    = $201;
  4086.     kAuthResolveCreationID*        = $202;
  4087.     kAuthGetSpecificIdentityInfo* = $203;
  4088.     kAuthGetLocalIdentity*        = $204;
  4089.     kAuthAddToLocalIdentityQueue* = $205;
  4090.     kAuthRemoveFromLocalIdentityQueue* = $206;
  4091.     kAuthAddKey*                    = $207;
  4092.     kAuthChangeKey*                = $208;
  4093.     kAuthDeleteKey*                = $209;
  4094.     kAuthPasswordToKey*            = $20A;
  4095.     kAuthGetCredentials*            = $20B;
  4096.     kAuthDecryptCredentials*        = $20C;
  4097.     kOCESetupRemoveDirectoryInfo* = $20D;
  4098.     kOCESetupGetDirectoryInfo*    = $20E;
  4099.     kAuthMakeChallenge*            = $20F;
  4100.     kAuthMakeReply*                = $210;
  4101.     kAuthVerifyReply*            = $211;
  4102.     kAuthMakeProxy*                = $212;
  4103.     kAuthTradeProxyForCredentials* = $213;
  4104.     kAuthUnlockLocalIdentity*    = $214;
  4105.     kAuthLockLocalIdentity*        = $215;
  4106.     kAuthSetupLocalIdentity*        = $216;
  4107.     kAuthChangeLocalIdentity*    = $217;
  4108.     kAuthRemoveLocalIdentity*    = $218;
  4109.     kOCESetupAddDirectoryInfo*    = $219;
  4110.     kAuthGetUTCTime*                = $21A;
  4111.     kOCESetupChangeDirectoryInfo* = $21B;
  4112. (* 0x100 is used as private command *)
  4113.     kDirEnumerateParse*            = $101;
  4114.     kDirLookupParse*                = $102;
  4115.     kDirEnumerateAttributeTypesParse* = $103;
  4116.     kDirEnumeratePseudonymParse*    = $104;
  4117.     kDirNetSearchADAPDirectoriesParse* = $105;
  4118.     kDirEnumerateDirectoriesParse* = $106;
  4119.     kDirFindADAPDirectoryByNetSearch* = $107;
  4120.     kDirNetSearchADAPDirectoriesGet* = $108;
  4121.     kDirAddRecord*                = $109;
  4122.     kDirDeleteRecord*            = $10A;
  4123.     kDirAddAttributeValue*        = $10B;
  4124.     kDirDeleteAttributeValue*    = $10C;
  4125.     kDirChangeAttributeValue*    = $10D;
  4126.     kDirVerifyAttributeValue*    = $10E;
  4127.     kDirAddPseudonym*            = $10F;
  4128.     kDirDeletePseudonym*            = $110;
  4129.     kDirEnumerateGet*            = $111;
  4130.     kDirEnumerateAttributeTypesGet* = $112;
  4131.     kDirEnumeratePseudonymGet*    = $113;
  4132.     kDirGetNameAndType*            = $114;
  4133.     kDirSetNameAndType*            = $115;
  4134.     kDirGetRecordMetaInfo*        = $116;
  4135.     kDirLookupGet*                = $117;
  4136.     kDirGetDNodeMetaInfo*        = $118;
  4137.     kDirGetDirectoryInfo*        = $119;
  4138.     kDirEnumerateDirectoriesGet*    = $11A;
  4139.     kDirAbort*                    = $11B;
  4140.     kDirAddAlias*                = $11C;
  4141.     kDirAddDSAM*                    = $11D;
  4142.     kDirOpenPersonalDirectory*    = $11E;
  4143.     kDirCreatePersonalDirectory*    = $11F;
  4144.     kDirRemoveDSAM*                = $120;
  4145.     kDirGetDirectoryIcon*        = $121;
  4146.     kDirMapPathNameToDNodeNumber* = $122;
  4147.     kDirMapDNodeNumberToPathName* = $123;
  4148.     kDirGetLocalNetworkSpec*        = $124;
  4149.     kDirGetDNodeInfo*            = $125;
  4150.     kDirFindValue*                = $126;
  4151.     kDirInstantiateDSAM*            = $127;
  4152.     kDirGetOCESetupRefNum*        = $128;
  4153.     kDirGetDNodeAccessControlGet* = $12A;
  4154.     kDirGetRecordAccessControlGet* = $12C;
  4155.     kDirGetAttributeAccessControlGet* = $12E;
  4156.     kDirGetDNodeAccessControlParse* = $12F;
  4157.     kDirDeleteAttributeType*        = $130;
  4158.     kDirClosePersonalDirectory*    = $131;
  4159.     kDirMakePersonalDirectoryRLI* = $132;
  4160.     kDirAddDSAMDirectory*        = $133;
  4161.     kDirGetRecordAccessControlParse* = $134;
  4162.     kDirRemoveDirectory*            = $135;
  4163.     kDirGetExtendedDirectoriesInfo* = $136;
  4164.     kDirAddADAPDirectory*        = $137;
  4165.     kDirGetAttributeAccessControlParse* = $138;
  4166.     kDirFindRecordGet*            = $140;
  4167.     kDirFindRecordParse*            = $141;
  4168.  
  4169.  
  4170. PROCEDURE AuthBindSpecificIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4171.     (*$IF NOT GENERATINGCFM*)
  4172.     INLINE PASCAL $3F3C, $200, $AA5E;
  4173.     (*$END*)
  4174. PROCEDURE AuthUnbindSpecificIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4175.     (*$IF NOT GENERATINGCFM*)
  4176.     INLINE PASCAL $3F3C, $201, $AA5E;
  4177.     (*$END*)
  4178. PROCEDURE AuthResolveCreationID*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4179.     (*$IF NOT GENERATINGCFM*)
  4180.     INLINE PASCAL $3F3C, $202, $AA5E;
  4181.     (*$END*)
  4182. PROCEDURE AuthGetSpecificIdentityInfo*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4183.     (*$IF NOT GENERATINGCFM*)
  4184.     INLINE PASCAL $3F3C, $203, $AA5E;
  4185.     (*$END*)
  4186. PROCEDURE AuthAddKey*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4187.     (*$IF NOT GENERATINGCFM*)
  4188.     INLINE PASCAL $3F3C, $207, $AA5E;
  4189.     (*$END*)
  4190. PROCEDURE AuthChangeKey*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4191.     (*$IF NOT GENERATINGCFM*)
  4192.     INLINE PASCAL $3F3C, $208, $AA5E;
  4193.     (*$END*)
  4194. PROCEDURE AuthDeleteKey*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4195.     (*$IF NOT GENERATINGCFM*)
  4196.     INLINE PASCAL $3F3C, $209, $AA5E;
  4197.     (*$END*)
  4198. PROCEDURE AuthPasswordToKey*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4199.     (*$IF NOT GENERATINGCFM*)
  4200.     INLINE PASCAL $3F3C, $20A, $AA5E;
  4201.     (*$END*)
  4202. PROCEDURE AuthGetCredentials*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4203.     (*$IF NOT GENERATINGCFM*)
  4204.     INLINE PASCAL $3F3C, $20B, $AA5E;
  4205.     (*$END*)
  4206. PROCEDURE AuthDecryptCredentials*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4207.     (*$IF NOT GENERATINGCFM*)
  4208.     INLINE PASCAL $3F3C, $20C, $AA5E;
  4209.     (*$END*)
  4210. PROCEDURE AuthMakeChallenge*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4211.     (*$IF NOT GENERATINGCFM*)
  4212.     INLINE PASCAL $3F3C, $20F, $AA5E;
  4213.     (*$END*)
  4214. PROCEDURE AuthMakeReply*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4215.     (*$IF NOT GENERATINGCFM*)
  4216.     INLINE PASCAL $3F3C, $210, $AA5E;
  4217.     (*$END*)
  4218. PROCEDURE AuthVerifyReply*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4219.     (*$IF NOT GENERATINGCFM*)
  4220.     INLINE PASCAL $3F3C, $211, $AA5E;
  4221.     (*$END*)
  4222. PROCEDURE AuthGetUTCTime*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4223.     (*$IF NOT GENERATINGCFM*)
  4224.     INLINE PASCAL $3F3C, $21A, $AA5E;
  4225.     (*$END*)
  4226. PROCEDURE AuthMakeProxy*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4227.     (*$IF NOT GENERATINGCFM*)
  4228.     INLINE PASCAL $3F3C, $212, $AA5E;
  4229.     (*$END*)
  4230. PROCEDURE AuthTradeProxyForCredentials*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4231.     (*$IF NOT GENERATINGCFM*)
  4232.     INLINE PASCAL $3F3C, $213, $AA5E;
  4233.     (*$END*)
  4234. (* Local Identity API *)
  4235. PROCEDURE AuthGetLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4236.     (*$IF NOT GENERATINGCFM*)
  4237.     INLINE PASCAL $3F3C, $204, $AA5E;
  4238.     (*$END*)
  4239. PROCEDURE AuthUnlockLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4240.     (*$IF NOT GENERATINGCFM*)
  4241.     INLINE PASCAL $3F3C, $214, $AA5E;
  4242.     (*$END*)
  4243. PROCEDURE AuthLockLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4244.     (*$IF NOT GENERATINGCFM*)
  4245.     INLINE PASCAL $3F3C, $215, $AA5E;
  4246.     (*$END*)
  4247. PROCEDURE AuthAddToLocalIdentityQueue*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4248.     (*$IF NOT GENERATINGCFM*)
  4249.     INLINE PASCAL $3F3C, $205, $AA5E;
  4250.     (*$END*)
  4251. PROCEDURE AuthRemoveFromLocalIdentityQueue*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4252.     (*$IF NOT GENERATINGCFM*)
  4253.     INLINE PASCAL $3F3C, $206, $AA5E;
  4254.     (*$END*)
  4255. PROCEDURE AuthSetupLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4256.     (*$IF NOT GENERATINGCFM*)
  4257.     INLINE PASCAL $3F3C, $216, $AA5E;
  4258.     (*$END*)
  4259. PROCEDURE AuthChangeLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4260.     (*$IF NOT GENERATINGCFM*)
  4261.     INLINE PASCAL $3F3C, $217, $AA5E;
  4262.     (*$END*)
  4263. PROCEDURE AuthRemoveLocalIdentity*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4264.     (*$IF NOT GENERATINGCFM*)
  4265.     INLINE PASCAL $3F3C, $218, $AA5E;
  4266.     (*$END*)
  4267. PROCEDURE OCESetupAddDirectoryInfo*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4268.     (*$IF NOT GENERATINGCFM*)
  4269.     INLINE PASCAL $3F3C, $219, $AA5E;
  4270.     (*$END*)
  4271. PROCEDURE OCESetupChangeDirectoryInfo*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4272.     (*$IF NOT GENERATINGCFM*)
  4273.     INLINE PASCAL $3F3C, $21B, $AA5E;
  4274.     (*$END*)
  4275. PROCEDURE OCESetupRemoveDirectoryInfo*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4276.     (*$IF NOT GENERATINGCFM*)
  4277.     INLINE PASCAL $3F3C, $20D, $AA5E;
  4278.     (*$END*)
  4279. PROCEDURE OCESetupGetDirectoryInfo*(paramBlock: AuthParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4280.     (*$IF NOT GENERATINGCFM*)
  4281.     INLINE PASCAL $3F3C, $20E, $AA5E;
  4282.     (*$END*)
  4283. PROCEDURE DirAddRecord*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4284.     (*$IF NOT GENERATINGCFM*)
  4285.     INLINE PASCAL $3F3C, $109, $AA5E;
  4286.     (*$END*)
  4287. PROCEDURE DirDeleteRecord*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4288.     (*$IF NOT GENERATINGCFM*)
  4289.     INLINE PASCAL $3F3C, $10A, $AA5E;
  4290.     (*$END*)
  4291. PROCEDURE DirEnumerateGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4292.     (*$IF NOT GENERATINGCFM*)
  4293.     INLINE PASCAL $3F3C, $111, $AA5E;
  4294.     (*$END*)
  4295. PROCEDURE DirEnumerateParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4296.     (*$IF NOT GENERATINGCFM*)
  4297.     INLINE PASCAL $3F3C, $101, $AA5E;
  4298.     (*$END*)
  4299. PROCEDURE DirFindRecordGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4300.     (*$IF NOT GENERATINGCFM*)
  4301.     INLINE PASCAL $3F3C, $140, $AA5E;
  4302.     (*$END*)
  4303. PROCEDURE DirFindRecordParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4304.     (*$IF NOT GENERATINGCFM*)
  4305.     INLINE PASCAL $3F3C, $141, $AA5E;
  4306.     (*$END*)
  4307. PROCEDURE DirLookupGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4308.     (*$IF NOT GENERATINGCFM*)
  4309.     INLINE PASCAL $3F3C, $117, $AA5E;
  4310.     (*$END*)
  4311. PROCEDURE DirLookupParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4312.     (*$IF NOT GENERATINGCFM*)
  4313.     INLINE PASCAL $3F3C, $102, $AA5E;
  4314.     (*$END*)
  4315. PROCEDURE DirAddAttributeValue*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4316.     (*$IF NOT GENERATINGCFM*)
  4317.     INLINE PASCAL $3F3C, $10B, $AA5E;
  4318.     (*$END*)
  4319. PROCEDURE DirDeleteAttributeValue*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4320.     (*$IF NOT GENERATINGCFM*)
  4321.     INLINE PASCAL $3F3C, $10C, $AA5E;
  4322.     (*$END*)
  4323. PROCEDURE DirDeleteAttributeType*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4324.     (*$IF NOT GENERATINGCFM*)
  4325.     INLINE PASCAL $3F3C, $130, $AA5E;
  4326.     (*$END*)
  4327. PROCEDURE DirChangeAttributeValue*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4328.     (*$IF NOT GENERATINGCFM*)
  4329.     INLINE PASCAL $3F3C, $10D, $AA5E;
  4330.     (*$END*)
  4331. PROCEDURE DirVerifyAttributeValue*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4332.     (*$IF NOT GENERATINGCFM*)
  4333.     INLINE PASCAL $3F3C, $10E, $AA5E;
  4334.     (*$END*)
  4335. PROCEDURE DirFindValue*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4336.     (*$IF NOT GENERATINGCFM*)
  4337.     INLINE PASCAL $3F3C, $126, $AA5E;
  4338.     (*$END*)
  4339. PROCEDURE DirEnumerateAttributeTypesGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4340.     (*$IF NOT GENERATINGCFM*)
  4341.     INLINE PASCAL $3F3C, $112, $AA5E;
  4342.     (*$END*)
  4343. PROCEDURE DirEnumerateAttributeTypesParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4344.     (*$IF NOT GENERATINGCFM*)
  4345.     INLINE PASCAL $3F3C, $103, $AA5E;
  4346.     (*$END*)
  4347. PROCEDURE DirAddPseudonym*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4348.     (*$IF NOT GENERATINGCFM*)
  4349.     INLINE PASCAL $3F3C, $10F, $AA5E;
  4350.     (*$END*)
  4351. PROCEDURE DirDeletePseudonym*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4352.     (*$IF NOT GENERATINGCFM*)
  4353.     INLINE PASCAL $3F3C, $110, $AA5E;
  4354.     (*$END*)
  4355. PROCEDURE DirAddAlias*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4356.     (*$IF NOT GENERATINGCFM*)
  4357.     INLINE PASCAL $3F3C, $11C, $AA5E;
  4358.     (*$END*)
  4359. PROCEDURE DirEnumeratePseudonymGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4360.     (*$IF NOT GENERATINGCFM*)
  4361.     INLINE PASCAL $3F3C, $113, $AA5E;
  4362.     (*$END*)
  4363. PROCEDURE DirEnumeratePseudonymParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4364.     (*$IF NOT GENERATINGCFM*)
  4365.     INLINE PASCAL $3F3C, $104, $AA5E;
  4366.     (*$END*)
  4367. PROCEDURE DirGetNameAndType*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4368.     (*$IF NOT GENERATINGCFM*)
  4369.     INLINE PASCAL $3F3C, $114, $AA5E;
  4370.     (*$END*)
  4371. PROCEDURE DirSetNameAndType*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4372.     (*$IF NOT GENERATINGCFM*)
  4373.     INLINE PASCAL $3F3C, $115, $AA5E;
  4374.     (*$END*)
  4375. PROCEDURE DirGetRecordMetaInfo*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4376.     (*$IF NOT GENERATINGCFM*)
  4377.     INLINE PASCAL $3F3C, $116, $AA5E;
  4378.     (*$END*)
  4379. PROCEDURE DirGetDNodeMetaInfo*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4380.     (*$IF NOT GENERATINGCFM*)
  4381.     INLINE PASCAL $3F3C, $118, $AA5E;
  4382.     (*$END*)
  4383. PROCEDURE DirGetDirectoryInfo*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4384.     (*$IF NOT GENERATINGCFM*)
  4385.     INLINE PASCAL $3F3C, $119, $AA5E;
  4386.     (*$END*)
  4387. PROCEDURE DirGetDNodeAccessControlGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4388.     (*$IF NOT GENERATINGCFM*)
  4389.     INLINE PASCAL $3F3C, $12A, $AA5E;
  4390.     (*$END*)
  4391. PROCEDURE DirGetDNodeAccessControlParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4392.     (*$IF NOT GENERATINGCFM*)
  4393.     INLINE PASCAL $3F3C, $12F, $AA5E;
  4394.     (*$END*)
  4395. PROCEDURE DirGetRecordAccessControlGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4396.     (*$IF NOT GENERATINGCFM*)
  4397.     INLINE PASCAL $3F3C, $12C, $AA5E;
  4398.     (*$END*)
  4399. PROCEDURE DirGetRecordAccessControlParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4400.     (*$IF NOT GENERATINGCFM*)
  4401.     INLINE PASCAL $3F3C, $134, $AA5E;
  4402.     (*$END*)
  4403. PROCEDURE DirGetAttributeAccessControlGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4404.     (*$IF NOT GENERATINGCFM*)
  4405.     INLINE PASCAL $3F3C, $12E, $AA5E;
  4406.     (*$END*)
  4407. PROCEDURE DirGetAttributeAccessControlParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4408.     (*$IF NOT GENERATINGCFM*)
  4409.     INLINE PASCAL $3F3C, $138, $AA5E;
  4410.     (*$END*)
  4411. PROCEDURE DirEnumerateDirectoriesGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4412.     (*$IF NOT GENERATINGCFM*)
  4413.     INLINE PASCAL $3F3C, $11A, $AA5E;
  4414.     (*$END*)
  4415. PROCEDURE DirEnumerateDirectoriesParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4416.     (*$IF NOT GENERATINGCFM*)
  4417.     INLINE PASCAL $3F3C, $106, $AA5E;
  4418.     (*$END*)
  4419. PROCEDURE DirMapPathNameToDNodeNumber*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4420.     (*$IF NOT GENERATINGCFM*)
  4421.     INLINE PASCAL $3F3C, $122, $AA5E;
  4422.     (*$END*)
  4423. PROCEDURE DirMapDNodeNumberToPathName*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4424.     (*$IF NOT GENERATINGCFM*)
  4425.     INLINE PASCAL $3F3C, $123, $AA5E;
  4426.     (*$END*)
  4427. PROCEDURE DirGetLocalNetworkSpec*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4428.     (*$IF NOT GENERATINGCFM*)
  4429.     INLINE PASCAL $3F3C, $124, $AA5E;
  4430.     (*$END*)
  4431. PROCEDURE DirGetDNodeInfo*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4432.     (*$IF NOT GENERATINGCFM*)
  4433.     INLINE PASCAL $3F3C, $125, $AA5E;
  4434.     (*$END*)
  4435. (*  Trap Dispatchers for Personal Catalog and CSAM Extensions *)
  4436. PROCEDURE DirCreatePersonalDirectory*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4437.     (*$IF NOT GENERATINGCFM*)
  4438.     INLINE PASCAL $7000, $1f00, $3F3C, $11F, $AA5E;
  4439.     (*$END*)
  4440. PROCEDURE DirOpenPersonalDirectory*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4441.     (*$IF NOT GENERATINGCFM*)
  4442.     INLINE PASCAL $7000, $1f00, $3F3C, $11E, $AA5E;
  4443.     (*$END*)
  4444. PROCEDURE DirClosePersonalDirectory*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4445.     (*$IF NOT GENERATINGCFM*)
  4446.     INLINE PASCAL $7000, $1f00, $3F3C, $131, $AA5E;
  4447.     (*$END*)
  4448. PROCEDURE DirMakePersonalDirectoryRLI*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4449.     (*$IF NOT GENERATINGCFM*)
  4450.     INLINE PASCAL $7000, $1f00, $3F3C, $132, $AA5E;
  4451.     (*$END*)
  4452. PROCEDURE DirAddDSAM*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4453.     (*$IF NOT GENERATINGCFM*)
  4454.     INLINE PASCAL $7000, $1f00, $3F3C, $11D, $AA5E;
  4455.     (*$END*)
  4456. PROCEDURE DirInstantiateDSAM*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4457.     (*$IF NOT GENERATINGCFM*)
  4458.     INLINE PASCAL $7000, $1f00, $3F3C, $127, $AA5E;
  4459.     (*$END*)
  4460. PROCEDURE DirRemoveDSAM*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4461.     (*$IF NOT GENERATINGCFM*)
  4462.     INLINE PASCAL $7000, $1f00, $3F3C, $120, $AA5E;
  4463.     (*$END*)
  4464. PROCEDURE DirAddDSAMDirectory*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4465.     (*$IF NOT GENERATINGCFM*)
  4466.     INLINE PASCAL $3F3C, $133, $AA5E;
  4467.     (*$END*)
  4468. PROCEDURE DirGetExtendedDirectoriesInfo*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4469.     (*$IF NOT GENERATINGCFM*)
  4470.     INLINE PASCAL $3F3C, $136, $AA5E;
  4471.     (*$END*)
  4472. PROCEDURE DirGetDirectoryIcon*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4473.     (*$IF NOT GENERATINGCFM*)
  4474.     INLINE PASCAL $3F3C, $121, $AA5E;
  4475.     (*$END*)
  4476. PROCEDURE DirAddADAPDirectory*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4477.     (*$IF NOT GENERATINGCFM*)
  4478.     INLINE PASCAL $3F3C, $137, $AA5E;
  4479.     (*$END*)
  4480. PROCEDURE DirRemoveDirectory*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4481.     (*$IF NOT GENERATINGCFM*)
  4482.     INLINE PASCAL $3F3C, $135, $AA5E;
  4483.     (*$END*)
  4484. PROCEDURE DirNetSearchADAPDirectoriesGet*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4485.     (*$IF NOT GENERATINGCFM*)
  4486.     INLINE PASCAL $3F3C, $108, $AA5E;
  4487.     (*$END*)
  4488. PROCEDURE DirNetSearchADAPDirectoriesParse*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4489.     (*$IF NOT GENERATINGCFM*)
  4490.     INLINE PASCAL $3F3C, $105, $AA5E;
  4491.     (*$END*)
  4492. PROCEDURE DirFindADAPDirectoryByNetSearch*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4493.     (*$IF NOT GENERATINGCFM*)
  4494.     INLINE PASCAL $3F3C, $107, $AA5E;
  4495.     (*$END*)
  4496. PROCEDURE DirGetOCESetupRefNum*(paramBlock: DirParamBlockPtr; async: BOOLEAN): Types.OSErr;
  4497.     (*$IF NOT GENERATINGCFM*)
  4498.     INLINE PASCAL $3F3C, $128, $AA5E;
  4499.     (*$END*)
  4500. PROCEDURE DirAbort*(paramBlock: DirParamBlockPtr): Types.OSErr;
  4501.     (*$IF NOT GENERATINGCFM*)
  4502.     INLINE PASCAL $7000, $1f00, $3F3C, $11B, $AA5E;
  4503.     (*$END*)
  4504.  
  4505. (* $ALIGN RESET*)
  4506. (* $POP*)
  4507.  
  4508.  END OCEAuthDir.
  4509.